diff --git a/packages/google-cloud-redis-cluster/README.md b/packages/google-cloud-redis-cluster/README.md
index 669e64aa4190..5fc350c1cdda 100644
--- a/packages/google-cloud-redis-cluster/README.md
+++ b/packages/google-cloud-redis-cluster/README.md
@@ -73,7 +73,6 @@ Samples are in the [`samples/`][homepage_samples] directory. Each sample's `READ
 | list clusters | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1/cloud_redis_cluster.list_clusters.js) |
 | reschedule cluster maintenance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1/cloud_redis_cluster.reschedule_cluster_maintenance.js) |
 | update cluster | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1/cloud_redis_cluster.update_cluster.js) |
-| cloud | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1/snippet_metadata_google.cloud.redis.cluster.v1.json) |
 | backup cluster | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1beta1/cloud_redis_cluster.backup_cluster.js) |
 | create cluster | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1beta1/cloud_redis_cluster.create_cluster.js) |
 | delete backup | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1beta1/cloud_redis_cluster.delete_backup.js) |
@@ -89,7 +88,6 @@ Samples are in the [`samples/`][homepage_samples] directory. Each sample's `READ
 | list clusters | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1beta1/cloud_redis_cluster.list_clusters.js) |
 | reschedule cluster maintenance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1beta1/cloud_redis_cluster.reschedule_cluster_maintenance.js) |
 | update cluster | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1beta1/cloud_redis_cluster.update_cluster.js) |
-| cloud | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis-cluster/samples/generated/v1beta1/snippet_metadata_google.cloud.redis.cluster.v1beta1.json) |
 
 
 ## Supported Node.js Versions
diff --git a/packages/google-cloud-redis-cluster/protos/protos.js b/packages/google-cloud-redis-cluster/protos/protos.js
index dd14c18f7240..5cf74fb1f8be 100644
--- a/packages/google-cloud-redis-cluster/protos/protos.js
+++ b/packages/google-cloud-redis-cluster/protos/protos.js
@@ -738,7 +738,7 @@
                             function CreateClusterRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -833,9 +833,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            CreateClusterRequest.decode = function decode(reader, length, error) {
+                            CreateClusterRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.CreateClusterRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -851,7 +855,7 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.cluster = $root.google.cloud.redis.cluster.v1.Cluster.decode(reader, reader.uint32());
+                                            message.cluster = $root.google.cloud.redis.cluster.v1.Cluster.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 4: {
@@ -859,7 +863,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -890,9 +894,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            CreateClusterRequest.verify = function verify(message) {
+                            CreateClusterRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.parent != null && message.hasOwnProperty("parent"))
                                     if (!$util.isString(message.parent))
                                         return "parent: string expected";
@@ -900,7 +908,7 @@
                                     if (!$util.isString(message.clusterId))
                                         return "clusterId: string expected";
                                 if (message.cluster != null && message.hasOwnProperty("cluster")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.Cluster.verify(message.cluster);
+                                    var error = $root.google.cloud.redis.cluster.v1.Cluster.verify(message.cluster, long + 1);
                                     if (error)
                                         return "cluster." + error;
                                 }
@@ -918,9 +926,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.CreateClusterRequest} CreateClusterRequest
                              */
-                            CreateClusterRequest.fromObject = function fromObject(object) {
+                            CreateClusterRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.CreateClusterRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.CreateClusterRequest();
                                 if (object.parent != null)
                                     message.parent = String(object.parent);
@@ -929,7 +941,7 @@
                                 if (object.cluster != null) {
                                     if (typeof object.cluster !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.CreateClusterRequest.cluster: object expected");
-                                    message.cluster = $root.google.cloud.redis.cluster.v1.Cluster.fromObject(object.cluster);
+                                    message.cluster = $root.google.cloud.redis.cluster.v1.Cluster.fromObject(object.cluster, long + 1);
                                 }
                                 if (object.requestId != null)
                                     message.requestId = String(object.requestId);
@@ -1017,7 +1029,7 @@
                             function ListClustersRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -1102,9 +1114,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListClustersRequest.decode = function decode(reader, length, error) {
+                            ListClustersRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ListClustersRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -1124,7 +1140,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -1155,9 +1171,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListClustersRequest.verify = function verify(message) {
+                            ListClustersRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.parent != null && message.hasOwnProperty("parent"))
                                     if (!$util.isString(message.parent))
                                         return "parent: string expected";
@@ -1178,9 +1198,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ListClustersRequest} ListClustersRequest
                              */
-                            ListClustersRequest.fromObject = function fromObject(object) {
+                            ListClustersRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ListClustersRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ListClustersRequest();
                                 if (object.parent != null)
                                     message.parent = String(object.parent);
@@ -1271,7 +1295,7 @@
                                 this.unreachable = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -1358,9 +1382,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListClustersResponse.decode = function decode(reader, length, error) {
+                            ListClustersResponse.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ListClustersResponse();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -1370,7 +1398,7 @@
                                     case 1: {
                                             if (!(message.clusters && message.clusters.length))
                                                 message.clusters = [];
-                                            message.clusters.push($root.google.cloud.redis.cluster.v1.Cluster.decode(reader, reader.uint32()));
+                                            message.clusters.push($root.google.cloud.redis.cluster.v1.Cluster.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
@@ -1384,7 +1412,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -1415,14 +1443,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListClustersResponse.verify = function verify(message) {
+                            ListClustersResponse.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.clusters != null && message.hasOwnProperty("clusters")) {
                                     if (!Array.isArray(message.clusters))
                                         return "clusters: array expected";
                                     for (var i = 0; i < message.clusters.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.Cluster.verify(message.clusters[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.Cluster.verify(message.clusters[i], long + 1);
                                         if (error)
                                             return "clusters." + error;
                                     }
@@ -1448,9 +1480,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ListClustersResponse} ListClustersResponse
                              */
-                            ListClustersResponse.fromObject = function fromObject(object) {
+                            ListClustersResponse.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ListClustersResponse)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ListClustersResponse();
                                 if (object.clusters) {
                                     if (!Array.isArray(object.clusters))
@@ -1459,7 +1495,7 @@
                                     for (var i = 0; i < object.clusters.length; ++i) {
                                         if (typeof object.clusters[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.ListClustersResponse.clusters: object expected");
-                                        message.clusters[i] = $root.google.cloud.redis.cluster.v1.Cluster.fromObject(object.clusters[i]);
+                                        message.clusters[i] = $root.google.cloud.redis.cluster.v1.Cluster.fromObject(object.clusters[i], long + 1);
                                     }
                                 }
                                 if (object.nextPageToken != null)
@@ -1559,7 +1595,7 @@
                             function UpdateClusterRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -1644,9 +1680,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            UpdateClusterRequest.decode = function decode(reader, length, error) {
+                            UpdateClusterRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.UpdateClusterRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -1654,11 +1694,11 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                            message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.cluster = $root.google.cloud.redis.cluster.v1.Cluster.decode(reader, reader.uint32());
+                                            message.cluster = $root.google.cloud.redis.cluster.v1.Cluster.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -1666,7 +1706,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -1697,16 +1737,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            UpdateClusterRequest.verify = function verify(message) {
+                            UpdateClusterRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                    var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                    var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                     if (error)
                                         return "updateMask." + error;
                                 }
                                 if (message.cluster != null && message.hasOwnProperty("cluster")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.Cluster.verify(message.cluster);
+                                    var error = $root.google.cloud.redis.cluster.v1.Cluster.verify(message.cluster, long + 1);
                                     if (error)
                                         return "cluster." + error;
                                 }
@@ -1724,19 +1768,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.UpdateClusterRequest} UpdateClusterRequest
                              */
-                            UpdateClusterRequest.fromObject = function fromObject(object) {
+                            UpdateClusterRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.UpdateClusterRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.UpdateClusterRequest();
                                 if (object.updateMask != null) {
                                     if (typeof object.updateMask !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.UpdateClusterRequest.updateMask: object expected");
-                                    message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                    message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                                 }
                                 if (object.cluster != null) {
                                     if (typeof object.cluster !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.UpdateClusterRequest.cluster: object expected");
-                                    message.cluster = $root.google.cloud.redis.cluster.v1.Cluster.fromObject(object.cluster);
+                                    message.cluster = $root.google.cloud.redis.cluster.v1.Cluster.fromObject(object.cluster, long + 1);
                                 }
                                 if (object.requestId != null)
                                     message.requestId = String(object.requestId);
@@ -1819,7 +1867,7 @@
                             function GetClusterRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -1884,9 +1932,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GetClusterRequest.decode = function decode(reader, length, error) {
+                            GetClusterRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.GetClusterRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -1898,7 +1950,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -1929,9 +1981,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GetClusterRequest.verify = function verify(message) {
+                            GetClusterRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -1946,9 +2002,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.GetClusterRequest} GetClusterRequest
                              */
-                            GetClusterRequest.fromObject = function fromObject(object) {
+                            GetClusterRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.GetClusterRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.GetClusterRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -2025,7 +2085,7 @@
                             function DeleteClusterRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -2100,9 +2160,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DeleteClusterRequest.decode = function decode(reader, length, error) {
+                            DeleteClusterRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.DeleteClusterRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -2118,7 +2182,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -2149,9 +2213,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DeleteClusterRequest.verify = function verify(message) {
+                            DeleteClusterRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -2169,9 +2237,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.DeleteClusterRequest} DeleteClusterRequest
                              */
-                            DeleteClusterRequest.fromObject = function fromObject(object) {
+                            DeleteClusterRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.DeleteClusterRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.DeleteClusterRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -2253,7 +2325,7 @@
                             function GetClusterCertificateAuthorityRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -2318,9 +2390,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GetClusterCertificateAuthorityRequest.decode = function decode(reader, length, error) {
+                            GetClusterCertificateAuthorityRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.GetClusterCertificateAuthorityRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -2332,7 +2408,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -2363,9 +2439,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GetClusterCertificateAuthorityRequest.verify = function verify(message) {
+                            GetClusterCertificateAuthorityRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -2380,9 +2460,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.GetClusterCertificateAuthorityRequest} GetClusterCertificateAuthorityRequest
                              */
-                            GetClusterCertificateAuthorityRequest.fromObject = function fromObject(object) {
+                            GetClusterCertificateAuthorityRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.GetClusterCertificateAuthorityRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.GetClusterCertificateAuthorityRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -2460,7 +2544,7 @@
                             function ListBackupCollectionsRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -2545,9 +2629,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListBackupCollectionsRequest.decode = function decode(reader, length, error) {
+                            ListBackupCollectionsRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ListBackupCollectionsRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -2567,7 +2655,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -2598,9 +2686,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListBackupCollectionsRequest.verify = function verify(message) {
+                            ListBackupCollectionsRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.parent != null && message.hasOwnProperty("parent"))
                                     if (!$util.isString(message.parent))
                                         return "parent: string expected";
@@ -2621,9 +2713,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ListBackupCollectionsRequest} ListBackupCollectionsRequest
                              */
-                            ListBackupCollectionsRequest.fromObject = function fromObject(object) {
+                            ListBackupCollectionsRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ListBackupCollectionsRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ListBackupCollectionsRequest();
                                 if (object.parent != null)
                                     message.parent = String(object.parent);
@@ -2714,7 +2810,7 @@
                                 this.unreachable = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -2801,9 +2897,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListBackupCollectionsResponse.decode = function decode(reader, length, error) {
+                            ListBackupCollectionsResponse.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ListBackupCollectionsResponse();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -2813,7 +2913,7 @@
                                     case 1: {
                                             if (!(message.backupCollections && message.backupCollections.length))
                                                 message.backupCollections = [];
-                                            message.backupCollections.push($root.google.cloud.redis.cluster.v1.BackupCollection.decode(reader, reader.uint32()));
+                                            message.backupCollections.push($root.google.cloud.redis.cluster.v1.BackupCollection.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
@@ -2827,7 +2927,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -2858,14 +2958,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListBackupCollectionsResponse.verify = function verify(message) {
+                            ListBackupCollectionsResponse.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.backupCollections != null && message.hasOwnProperty("backupCollections")) {
                                     if (!Array.isArray(message.backupCollections))
                                         return "backupCollections: array expected";
                                     for (var i = 0; i < message.backupCollections.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.BackupCollection.verify(message.backupCollections[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.BackupCollection.verify(message.backupCollections[i], long + 1);
                                         if (error)
                                             return "backupCollections." + error;
                                     }
@@ -2891,9 +2995,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ListBackupCollectionsResponse} ListBackupCollectionsResponse
                              */
-                            ListBackupCollectionsResponse.fromObject = function fromObject(object) {
+                            ListBackupCollectionsResponse.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ListBackupCollectionsResponse)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ListBackupCollectionsResponse();
                                 if (object.backupCollections) {
                                     if (!Array.isArray(object.backupCollections))
@@ -2902,7 +3010,7 @@
                                     for (var i = 0; i < object.backupCollections.length; ++i) {
                                         if (typeof object.backupCollections[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.ListBackupCollectionsResponse.backupCollections: object expected");
-                                        message.backupCollections[i] = $root.google.cloud.redis.cluster.v1.BackupCollection.fromObject(object.backupCollections[i]);
+                                        message.backupCollections[i] = $root.google.cloud.redis.cluster.v1.BackupCollection.fromObject(object.backupCollections[i], long + 1);
                                     }
                                 }
                                 if (object.nextPageToken != null)
@@ -3000,7 +3108,7 @@
                             function GetBackupCollectionRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -3065,9 +3173,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GetBackupCollectionRequest.decode = function decode(reader, length, error) {
+                            GetBackupCollectionRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.GetBackupCollectionRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -3079,7 +3191,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -3110,9 +3222,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GetBackupCollectionRequest.verify = function verify(message) {
+                            GetBackupCollectionRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -3127,9 +3243,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.GetBackupCollectionRequest} GetBackupCollectionRequest
                              */
-                            GetBackupCollectionRequest.fromObject = function fromObject(object) {
+                            GetBackupCollectionRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.GetBackupCollectionRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.GetBackupCollectionRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -3207,7 +3327,7 @@
                             function ListBackupsRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -3292,9 +3412,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListBackupsRequest.decode = function decode(reader, length, error) {
+                            ListBackupsRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ListBackupsRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -3314,7 +3438,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -3345,9 +3469,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListBackupsRequest.verify = function verify(message) {
+                            ListBackupsRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.parent != null && message.hasOwnProperty("parent"))
                                     if (!$util.isString(message.parent))
                                         return "parent: string expected";
@@ -3368,9 +3496,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ListBackupsRequest} ListBackupsRequest
                              */
-                            ListBackupsRequest.fromObject = function fromObject(object) {
+                            ListBackupsRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ListBackupsRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ListBackupsRequest();
                                 if (object.parent != null)
                                     message.parent = String(object.parent);
@@ -3461,7 +3593,7 @@
                                 this.unreachable = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -3548,9 +3680,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListBackupsResponse.decode = function decode(reader, length, error) {
+                            ListBackupsResponse.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ListBackupsResponse();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -3560,7 +3696,7 @@
                                     case 1: {
                                             if (!(message.backups && message.backups.length))
                                                 message.backups = [];
-                                            message.backups.push($root.google.cloud.redis.cluster.v1.Backup.decode(reader, reader.uint32()));
+                                            message.backups.push($root.google.cloud.redis.cluster.v1.Backup.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
@@ -3574,7 +3710,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -3605,14 +3741,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListBackupsResponse.verify = function verify(message) {
+                            ListBackupsResponse.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.backups != null && message.hasOwnProperty("backups")) {
                                     if (!Array.isArray(message.backups))
                                         return "backups: array expected";
                                     for (var i = 0; i < message.backups.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.Backup.verify(message.backups[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.Backup.verify(message.backups[i], long + 1);
                                         if (error)
                                             return "backups." + error;
                                     }
@@ -3638,9 +3778,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ListBackupsResponse} ListBackupsResponse
                              */
-                            ListBackupsResponse.fromObject = function fromObject(object) {
+                            ListBackupsResponse.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ListBackupsResponse)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ListBackupsResponse();
                                 if (object.backups) {
                                     if (!Array.isArray(object.backups))
@@ -3649,7 +3793,7 @@
                                     for (var i = 0; i < object.backups.length; ++i) {
                                         if (typeof object.backups[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.ListBackupsResponse.backups: object expected");
-                                        message.backups[i] = $root.google.cloud.redis.cluster.v1.Backup.fromObject(object.backups[i]);
+                                        message.backups[i] = $root.google.cloud.redis.cluster.v1.Backup.fromObject(object.backups[i], long + 1);
                                     }
                                 }
                                 if (object.nextPageToken != null)
@@ -3747,7 +3891,7 @@
                             function GetBackupRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -3812,9 +3956,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GetBackupRequest.decode = function decode(reader, length, error) {
+                            GetBackupRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.GetBackupRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -3826,7 +3974,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -3857,9 +4005,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GetBackupRequest.verify = function verify(message) {
+                            GetBackupRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -3874,9 +4026,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.GetBackupRequest} GetBackupRequest
                              */
-                            GetBackupRequest.fromObject = function fromObject(object) {
+                            GetBackupRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.GetBackupRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.GetBackupRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -3953,7 +4109,7 @@
                             function DeleteBackupRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -4028,9 +4184,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DeleteBackupRequest.decode = function decode(reader, length, error) {
+                            DeleteBackupRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.DeleteBackupRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -4046,7 +4206,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -4077,9 +4237,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DeleteBackupRequest.verify = function verify(message) {
+                            DeleteBackupRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -4097,9 +4261,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.DeleteBackupRequest} DeleteBackupRequest
                              */
-                            DeleteBackupRequest.fromObject = function fromObject(object) {
+                            DeleteBackupRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.DeleteBackupRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.DeleteBackupRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -4182,7 +4350,7 @@
                             function ExportBackupRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -4271,9 +4439,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ExportBackupRequest.decode = function decode(reader, length, error) {
+                            ExportBackupRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ExportBackupRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -4289,7 +4461,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -4320,9 +4492,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ExportBackupRequest.verify = function verify(message) {
+                            ExportBackupRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.gcsBucket != null && message.hasOwnProperty("gcsBucket")) {
                                     properties.destination = 1;
@@ -4343,9 +4519,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ExportBackupRequest} ExportBackupRequest
                              */
-                            ExportBackupRequest.fromObject = function fromObject(object) {
+                            ExportBackupRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ExportBackupRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ExportBackupRequest();
                                 if (object.gcsBucket != null)
                                     message.gcsBucket = String(object.gcsBucket);
@@ -4430,7 +4610,7 @@
                             function BackupClusterRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -4524,9 +4704,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BackupClusterRequest.decode = function decode(reader, length, error) {
+                            BackupClusterRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.BackupClusterRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -4538,7 +4722,7 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.ttl = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                            message.ttl = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -4546,7 +4730,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -4577,15 +4761,19 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BackupClusterRequest.verify = function verify(message) {
+                            BackupClusterRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
                                 if (message.ttl != null && message.hasOwnProperty("ttl")) {
-                                    var error = $root.google.protobuf.Duration.verify(message.ttl);
+                                    var error = $root.google.protobuf.Duration.verify(message.ttl, long + 1);
                                     if (error)
                                         return "ttl." + error;
                                 }
@@ -4605,16 +4793,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.BackupClusterRequest} BackupClusterRequest
                              */
-                            BackupClusterRequest.fromObject = function fromObject(object) {
+                            BackupClusterRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.BackupClusterRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.BackupClusterRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
                                 if (object.ttl != null) {
                                     if (typeof object.ttl !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.BackupClusterRequest.ttl: object expected");
-                                    message.ttl = $root.google.protobuf.Duration.fromObject(object.ttl);
+                                    message.ttl = $root.google.protobuf.Duration.fromObject(object.ttl, long + 1);
                                 }
                                 if (object.backupId != null)
                                     message.backupId = String(object.backupId);
@@ -4737,7 +4929,7 @@
                                 this.clusterEndpoints = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -5214,9 +5406,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            Cluster.decode = function decode(reader, length, error) {
+                            Cluster.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.Cluster(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -5224,11 +5420,11 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 34: {
-                                            message.gcsSource = $root.google.cloud.redis.cluster.v1.Cluster.GcsBackupSource.decode(reader, reader.uint32());
+                                            message.gcsSource = $root.google.cloud.redis.cluster.v1.Cluster.GcsBackupSource.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 35: {
-                                            message.managedBackupSource = $root.google.cloud.redis.cluster.v1.Cluster.ManagedBackupSource.decode(reader, reader.uint32());
+                                            message.managedBackupSource = $root.google.cloud.redis.cluster.v1.Cluster.ManagedBackupSource.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 1: {
@@ -5236,7 +5432,7 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 4: {
@@ -5270,23 +5466,23 @@
                                     case 15: {
                                             if (!(message.pscConfigs && message.pscConfigs.length))
                                                 message.pscConfigs = [];
-                                            message.pscConfigs.push($root.google.cloud.redis.cluster.v1.PscConfig.decode(reader, reader.uint32()));
+                                            message.pscConfigs.push($root.google.cloud.redis.cluster.v1.PscConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 16: {
                                             if (!(message.discoveryEndpoints && message.discoveryEndpoints.length))
                                                 message.discoveryEndpoints = [];
-                                            message.discoveryEndpoints.push($root.google.cloud.redis.cluster.v1.DiscoveryEndpoint.decode(reader, reader.uint32()));
+                                            message.discoveryEndpoints.push($root.google.cloud.redis.cluster.v1.DiscoveryEndpoint.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 17: {
                                             if (!(message.pscConnections && message.pscConnections.length))
                                                 message.pscConnections = [];
-                                            message.pscConnections.push($root.google.cloud.redis.cluster.v1.PscConnection.decode(reader, reader.uint32()));
+                                            message.pscConnections.push($root.google.cloud.redis.cluster.v1.PscConnection.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 18: {
-                                            message.stateInfo = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.decode(reader, reader.uint32());
+                                            message.stateInfo = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 19: {
@@ -5294,7 +5490,7 @@
                                             break;
                                         }
                                     case 20: {
-                                            message.persistenceConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.decode(reader, reader.uint32());
+                                            message.persistenceConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 21: {
@@ -5313,10 +5509,12 @@
                                                     value = reader.string();
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.redisConfigs, key);
                                             message.redisConfigs[key] = value;
                                             break;
                                         }
@@ -5325,11 +5523,11 @@
                                             break;
                                         }
                                     case 23: {
-                                            message.zoneDistributionConfig = $root.google.cloud.redis.cluster.v1.ZoneDistributionConfig.decode(reader, reader.uint32());
+                                            message.zoneDistributionConfig = $root.google.cloud.redis.cluster.v1.ZoneDistributionConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 24: {
-                                            message.crossClusterReplicationConfig = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.decode(reader, reader.uint32());
+                                            message.crossClusterReplicationConfig = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 25: {
@@ -5337,23 +5535,23 @@
                                             break;
                                         }
                                     case 26: {
-                                            message.maintenancePolicy = $root.google.cloud.redis.cluster.v1.ClusterMaintenancePolicy.decode(reader, reader.uint32());
+                                            message.maintenancePolicy = $root.google.cloud.redis.cluster.v1.ClusterMaintenancePolicy.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 27: {
-                                            message.maintenanceSchedule = $root.google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule.decode(reader, reader.uint32());
+                                            message.maintenanceSchedule = $root.google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 30: {
                                             if (!(message.pscServiceAttachments && message.pscServiceAttachments.length))
                                                 message.pscServiceAttachments = [];
-                                            message.pscServiceAttachments.push($root.google.cloud.redis.cluster.v1.PscServiceAttachment.decode(reader, reader.uint32()));
+                                            message.pscServiceAttachments.push($root.google.cloud.redis.cluster.v1.PscServiceAttachment.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 36: {
                                             if (!(message.clusterEndpoints && message.clusterEndpoints.length))
                                                 message.clusterEndpoints = [];
-                                            message.clusterEndpoints.push($root.google.cloud.redis.cluster.v1.ClusterEndpoint.decode(reader, reader.uint32()));
+                                            message.clusterEndpoints.push($root.google.cloud.redis.cluster.v1.ClusterEndpoint.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 39: {
@@ -5365,11 +5563,11 @@
                                             break;
                                         }
                                     case 42: {
-                                            message.automatedBackupConfig = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.decode(reader, reader.uint32());
+                                            message.automatedBackupConfig = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 43: {
-                                            message.encryptionInfo = $root.google.cloud.redis.cluster.v1.EncryptionInfo.decode(reader, reader.uint32());
+                                            message.encryptionInfo = $root.google.cloud.redis.cluster.v1.EncryptionInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 53: {
@@ -5385,7 +5583,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -5416,14 +5614,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            Cluster.verify = function verify(message) {
+                            Cluster.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.gcsSource != null && message.hasOwnProperty("gcsSource")) {
                                     properties.importSources = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1.Cluster.GcsBackupSource.verify(message.gcsSource);
+                                        var error = $root.google.cloud.redis.cluster.v1.Cluster.GcsBackupSource.verify(message.gcsSource, long + 1);
                                         if (error)
                                             return "gcsSource." + error;
                                     }
@@ -5433,7 +5635,7 @@
                                         return "importSources: multiple values";
                                     properties.importSources = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1.Cluster.ManagedBackupSource.verify(message.managedBackupSource);
+                                        var error = $root.google.cloud.redis.cluster.v1.Cluster.ManagedBackupSource.verify(message.managedBackupSource, long + 1);
                                         if (error)
                                             return "managedBackupSource." + error;
                                     }
@@ -5442,7 +5644,7 @@
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
                                 if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                     if (error)
                                         return "createTime." + error;
                                 }
@@ -5497,7 +5699,7 @@
                                     if (!Array.isArray(message.pscConfigs))
                                         return "pscConfigs: array expected";
                                     for (var i = 0; i < message.pscConfigs.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.PscConfig.verify(message.pscConfigs[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.PscConfig.verify(message.pscConfigs[i], long + 1);
                                         if (error)
                                             return "pscConfigs." + error;
                                     }
@@ -5506,7 +5708,7 @@
                                     if (!Array.isArray(message.discoveryEndpoints))
                                         return "discoveryEndpoints: array expected";
                                     for (var i = 0; i < message.discoveryEndpoints.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.DiscoveryEndpoint.verify(message.discoveryEndpoints[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.DiscoveryEndpoint.verify(message.discoveryEndpoints[i], long + 1);
                                         if (error)
                                             return "discoveryEndpoints." + error;
                                     }
@@ -5515,13 +5717,13 @@
                                     if (!Array.isArray(message.pscConnections))
                                         return "pscConnections: array expected";
                                     for (var i = 0; i < message.pscConnections.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.PscConnection.verify(message.pscConnections[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.PscConnection.verify(message.pscConnections[i], long + 1);
                                         if (error)
                                             return "pscConnections." + error;
                                     }
                                 }
                                 if (message.stateInfo != null && message.hasOwnProperty("stateInfo")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.verify(message.stateInfo);
+                                    var error = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.verify(message.stateInfo, long + 1);
                                     if (error)
                                         return "stateInfo." + error;
                                 }
@@ -5540,7 +5742,7 @@
                                         break;
                                     }
                                 if (message.persistenceConfig != null && message.hasOwnProperty("persistenceConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.verify(message.persistenceConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.verify(message.persistenceConfig, long + 1);
                                     if (error)
                                         return "persistenceConfig." + error;
                                 }
@@ -5558,12 +5760,12 @@
                                         return "preciseSizeGb: number expected";
                                 }
                                 if (message.zoneDistributionConfig != null && message.hasOwnProperty("zoneDistributionConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.ZoneDistributionConfig.verify(message.zoneDistributionConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1.ZoneDistributionConfig.verify(message.zoneDistributionConfig, long + 1);
                                     if (error)
                                         return "zoneDistributionConfig." + error;
                                 }
                                 if (message.crossClusterReplicationConfig != null && message.hasOwnProperty("crossClusterReplicationConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.verify(message.crossClusterReplicationConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.verify(message.crossClusterReplicationConfig, long + 1);
                                     if (error)
                                         return "crossClusterReplicationConfig." + error;
                                 }
@@ -5575,7 +5777,7 @@
                                 if (message.maintenancePolicy != null && message.hasOwnProperty("maintenancePolicy")) {
                                     properties._maintenancePolicy = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1.ClusterMaintenancePolicy.verify(message.maintenancePolicy);
+                                        var error = $root.google.cloud.redis.cluster.v1.ClusterMaintenancePolicy.verify(message.maintenancePolicy, long + 1);
                                         if (error)
                                             return "maintenancePolicy." + error;
                                     }
@@ -5583,7 +5785,7 @@
                                 if (message.maintenanceSchedule != null && message.hasOwnProperty("maintenanceSchedule")) {
                                     properties._maintenanceSchedule = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule.verify(message.maintenanceSchedule);
+                                        var error = $root.google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule.verify(message.maintenanceSchedule, long + 1);
                                         if (error)
                                             return "maintenanceSchedule." + error;
                                     }
@@ -5592,7 +5794,7 @@
                                     if (!Array.isArray(message.pscServiceAttachments))
                                         return "pscServiceAttachments: array expected";
                                     for (var i = 0; i < message.pscServiceAttachments.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.PscServiceAttachment.verify(message.pscServiceAttachments[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.PscServiceAttachment.verify(message.pscServiceAttachments[i], long + 1);
                                         if (error)
                                             return "pscServiceAttachments." + error;
                                     }
@@ -5601,7 +5803,7 @@
                                     if (!Array.isArray(message.clusterEndpoints))
                                         return "clusterEndpoints: array expected";
                                     for (var i = 0; i < message.clusterEndpoints.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.ClusterEndpoint.verify(message.clusterEndpoints[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.ClusterEndpoint.verify(message.clusterEndpoints[i], long + 1);
                                         if (error)
                                             return "clusterEndpoints." + error;
                                     }
@@ -5617,12 +5819,12 @@
                                         return "kmsKey: string expected";
                                 }
                                 if (message.automatedBackupConfig != null && message.hasOwnProperty("automatedBackupConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.verify(message.automatedBackupConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.verify(message.automatedBackupConfig, long + 1);
                                     if (error)
                                         return "automatedBackupConfig." + error;
                                 }
                                 if (message.encryptionInfo != null && message.hasOwnProperty("encryptionInfo")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.EncryptionInfo.verify(message.encryptionInfo);
+                                    var error = $root.google.cloud.redis.cluster.v1.EncryptionInfo.verify(message.encryptionInfo, long + 1);
                                     if (error)
                                         return "encryptionInfo." + error;
                                 }
@@ -5659,26 +5861,30 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.Cluster} Cluster
                              */
-                            Cluster.fromObject = function fromObject(object) {
+                            Cluster.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.Cluster)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.Cluster();
                                 if (object.gcsSource != null) {
                                     if (typeof object.gcsSource !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.gcsSource: object expected");
-                                    message.gcsSource = $root.google.cloud.redis.cluster.v1.Cluster.GcsBackupSource.fromObject(object.gcsSource);
+                                    message.gcsSource = $root.google.cloud.redis.cluster.v1.Cluster.GcsBackupSource.fromObject(object.gcsSource, long + 1);
                                 }
                                 if (object.managedBackupSource != null) {
                                     if (typeof object.managedBackupSource !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.managedBackupSource: object expected");
-                                    message.managedBackupSource = $root.google.cloud.redis.cluster.v1.Cluster.ManagedBackupSource.fromObject(object.managedBackupSource);
+                                    message.managedBackupSource = $root.google.cloud.redis.cluster.v1.Cluster.ManagedBackupSource.fromObject(object.managedBackupSource, long + 1);
                                 }
                                 if (object.name != null)
                                     message.name = String(object.name);
                                 if (object.createTime != null) {
                                     if (typeof object.createTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.createTime: object expected");
-                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                                 }
                                 switch (object.state) {
                                 default:
@@ -5763,7 +5969,7 @@
                                     for (var i = 0; i < object.pscConfigs.length; ++i) {
                                         if (typeof object.pscConfigs[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.Cluster.pscConfigs: object expected");
-                                        message.pscConfigs[i] = $root.google.cloud.redis.cluster.v1.PscConfig.fromObject(object.pscConfigs[i]);
+                                        message.pscConfigs[i] = $root.google.cloud.redis.cluster.v1.PscConfig.fromObject(object.pscConfigs[i], long + 1);
                                     }
                                 }
                                 if (object.discoveryEndpoints) {
@@ -5773,7 +5979,7 @@
                                     for (var i = 0; i < object.discoveryEndpoints.length; ++i) {
                                         if (typeof object.discoveryEndpoints[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.Cluster.discoveryEndpoints: object expected");
-                                        message.discoveryEndpoints[i] = $root.google.cloud.redis.cluster.v1.DiscoveryEndpoint.fromObject(object.discoveryEndpoints[i]);
+                                        message.discoveryEndpoints[i] = $root.google.cloud.redis.cluster.v1.DiscoveryEndpoint.fromObject(object.discoveryEndpoints[i], long + 1);
                                     }
                                 }
                                 if (object.pscConnections) {
@@ -5783,13 +5989,13 @@
                                     for (var i = 0; i < object.pscConnections.length; ++i) {
                                         if (typeof object.pscConnections[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.Cluster.pscConnections: object expected");
-                                        message.pscConnections[i] = $root.google.cloud.redis.cluster.v1.PscConnection.fromObject(object.pscConnections[i]);
+                                        message.pscConnections[i] = $root.google.cloud.redis.cluster.v1.PscConnection.fromObject(object.pscConnections[i], long + 1);
                                     }
                                 }
                                 if (object.stateInfo != null) {
                                     if (typeof object.stateInfo !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.stateInfo: object expected");
-                                    message.stateInfo = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.fromObject(object.stateInfo);
+                                    message.stateInfo = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.fromObject(object.stateInfo, long + 1);
                                 }
                                 switch (object.nodeType) {
                                 default:
@@ -5834,38 +6040,41 @@
                                 if (object.persistenceConfig != null) {
                                     if (typeof object.persistenceConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.persistenceConfig: object expected");
-                                    message.persistenceConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.fromObject(object.persistenceConfig);
+                                    message.persistenceConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.fromObject(object.persistenceConfig, long + 1);
                                 }
                                 if (object.redisConfigs) {
                                     if (typeof object.redisConfigs !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.redisConfigs: object expected");
                                     message.redisConfigs = {};
-                                    for (var keys = Object.keys(object.redisConfigs), i = 0; i < keys.length; ++i)
+                                    for (var keys = Object.keys(object.redisConfigs), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.redisConfigs, keys[i]);
                                         message.redisConfigs[keys[i]] = String(object.redisConfigs[keys[i]]);
+                                    }
                                 }
                                 if (object.preciseSizeGb != null)
                                     message.preciseSizeGb = Number(object.preciseSizeGb);
                                 if (object.zoneDistributionConfig != null) {
                                     if (typeof object.zoneDistributionConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.zoneDistributionConfig: object expected");
-                                    message.zoneDistributionConfig = $root.google.cloud.redis.cluster.v1.ZoneDistributionConfig.fromObject(object.zoneDistributionConfig);
+                                    message.zoneDistributionConfig = $root.google.cloud.redis.cluster.v1.ZoneDistributionConfig.fromObject(object.zoneDistributionConfig, long + 1);
                                 }
                                 if (object.crossClusterReplicationConfig != null) {
                                     if (typeof object.crossClusterReplicationConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.crossClusterReplicationConfig: object expected");
-                                    message.crossClusterReplicationConfig = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.fromObject(object.crossClusterReplicationConfig);
+                                    message.crossClusterReplicationConfig = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.fromObject(object.crossClusterReplicationConfig, long + 1);
                                 }
                                 if (object.deletionProtectionEnabled != null)
                                     message.deletionProtectionEnabled = Boolean(object.deletionProtectionEnabled);
                                 if (object.maintenancePolicy != null) {
                                     if (typeof object.maintenancePolicy !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.maintenancePolicy: object expected");
-                                    message.maintenancePolicy = $root.google.cloud.redis.cluster.v1.ClusterMaintenancePolicy.fromObject(object.maintenancePolicy);
+                                    message.maintenancePolicy = $root.google.cloud.redis.cluster.v1.ClusterMaintenancePolicy.fromObject(object.maintenancePolicy, long + 1);
                                 }
                                 if (object.maintenanceSchedule != null) {
                                     if (typeof object.maintenanceSchedule !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.maintenanceSchedule: object expected");
-                                    message.maintenanceSchedule = $root.google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule.fromObject(object.maintenanceSchedule);
+                                    message.maintenanceSchedule = $root.google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule.fromObject(object.maintenanceSchedule, long + 1);
                                 }
                                 if (object.pscServiceAttachments) {
                                     if (!Array.isArray(object.pscServiceAttachments))
@@ -5874,7 +6083,7 @@
                                     for (var i = 0; i < object.pscServiceAttachments.length; ++i) {
                                         if (typeof object.pscServiceAttachments[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.Cluster.pscServiceAttachments: object expected");
-                                        message.pscServiceAttachments[i] = $root.google.cloud.redis.cluster.v1.PscServiceAttachment.fromObject(object.pscServiceAttachments[i]);
+                                        message.pscServiceAttachments[i] = $root.google.cloud.redis.cluster.v1.PscServiceAttachment.fromObject(object.pscServiceAttachments[i], long + 1);
                                     }
                                 }
                                 if (object.clusterEndpoints) {
@@ -5884,7 +6093,7 @@
                                     for (var i = 0; i < object.clusterEndpoints.length; ++i) {
                                         if (typeof object.clusterEndpoints[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.Cluster.clusterEndpoints: object expected");
-                                        message.clusterEndpoints[i] = $root.google.cloud.redis.cluster.v1.ClusterEndpoint.fromObject(object.clusterEndpoints[i]);
+                                        message.clusterEndpoints[i] = $root.google.cloud.redis.cluster.v1.ClusterEndpoint.fromObject(object.clusterEndpoints[i], long + 1);
                                     }
                                 }
                                 if (object.backupCollection != null)
@@ -5894,12 +6103,12 @@
                                 if (object.automatedBackupConfig != null) {
                                     if (typeof object.automatedBackupConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.automatedBackupConfig: object expected");
-                                    message.automatedBackupConfig = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.fromObject(object.automatedBackupConfig);
+                                    message.automatedBackupConfig = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.fromObject(object.automatedBackupConfig, long + 1);
                                 }
                                 if (object.encryptionInfo != null) {
                                     if (typeof object.encryptionInfo !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Cluster.encryptionInfo: object expected");
-                                    message.encryptionInfo = $root.google.cloud.redis.cluster.v1.EncryptionInfo.fromObject(object.encryptionInfo);
+                                    message.encryptionInfo = $root.google.cloud.redis.cluster.v1.EncryptionInfo.fromObject(object.encryptionInfo, long + 1);
                                 }
                                 switch (object.serverCaMode) {
                                 default:
@@ -6020,8 +6229,11 @@
                                 var keys2;
                                 if (message.redisConfigs && (keys2 = Object.keys(message.redisConfigs)).length) {
                                     object.redisConfigs = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.redisConfigs, keys2[j]);
                                         object.redisConfigs[keys2[j]] = message.redisConfigs[keys2[j]];
+                                    }
                                 }
                                 if (message.preciseSizeGb != null && message.hasOwnProperty("preciseSizeGb")) {
                                     object.preciseSizeGb = options.json && !isFinite(message.preciseSizeGb) ? String(message.preciseSizeGb) : message.preciseSizeGb;
@@ -6145,7 +6357,7 @@
                                 function StateInfo(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -6224,9 +6436,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                StateInfo.decode = function decode(reader, length, error) {
+                                StateInfo.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.Cluster.StateInfo();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -6234,11 +6450,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.updateInfo = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo.decode(reader, reader.uint32());
+                                                message.updateInfo = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -6269,14 +6485,18 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                StateInfo.verify = function verify(message) {
+                                StateInfo.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.updateInfo != null && message.hasOwnProperty("updateInfo")) {
                                         properties.info = 1;
                                         {
-                                            var error = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo.verify(message.updateInfo);
+                                            var error = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo.verify(message.updateInfo, long + 1);
                                             if (error)
                                                 return "updateInfo." + error;
                                         }
@@ -6292,14 +6512,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1.Cluster.StateInfo} StateInfo
                                  */
-                                StateInfo.fromObject = function fromObject(object) {
+                                StateInfo.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1.Cluster.StateInfo)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1.Cluster.StateInfo();
                                     if (object.updateInfo != null) {
                                         if (typeof object.updateInfo !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.Cluster.StateInfo.updateInfo: object expected");
-                                        message.updateInfo = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo.fromObject(object.updateInfo);
+                                        message.updateInfo = $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo.fromObject(object.updateInfo, long + 1);
                                     }
                                     return message;
                                 };
@@ -6372,7 +6596,7 @@
                                     function UpdateInfo(properties) {
                                         if (properties)
                                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                                if (properties[keys[i]] != null)
+                                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                     this[keys[i]] = properties[keys[i]];
                                     }
     
@@ -6462,9 +6686,13 @@
                                      * @throws {Error} If the payload is not a reader or valid buffer
                                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                      */
-                                    UpdateInfo.decode = function decode(reader, length, error) {
+                                    UpdateInfo.decode = function decode(reader, length, error, long) {
                                         if (!(reader instanceof $Reader))
                                             reader = $Reader.create(reader);
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $Reader.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo();
                                         while (reader.pos < end) {
                                             var tag = reader.uint32();
@@ -6480,7 +6708,7 @@
                                                     break;
                                                 }
                                             default:
-                                                reader.skipType(tag & 7);
+                                                reader.skipType(tag & 7, long);
                                                 break;
                                             }
                                         }
@@ -6511,9 +6739,13 @@
                                      * @param {Object.<string,*>} message Plain object to verify
                                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                      */
-                                    UpdateInfo.verify = function verify(message) {
+                                    UpdateInfo.verify = function verify(message, long) {
                                         if (typeof message !== "object" || message === null)
                                             return "object expected";
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            return "maximum nesting depth exceeded";
                                         var properties = {};
                                         if (message.targetShardCount != null && message.hasOwnProperty("targetShardCount")) {
                                             properties._targetShardCount = 1;
@@ -6536,9 +6768,13 @@
                                      * @param {Object.<string,*>} object Plain object
                                      * @returns {google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo} UpdateInfo
                                      */
-                                    UpdateInfo.fromObject = function fromObject(object) {
+                                    UpdateInfo.fromObject = function fromObject(object, long) {
                                         if (object instanceof $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo)
                                             return object;
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var message = new $root.google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo();
                                         if (object.targetShardCount != null)
                                             message.targetShardCount = object.targetShardCount | 0;
@@ -6626,7 +6862,7 @@
                                     this.uris = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -6692,9 +6928,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                GcsBackupSource.decode = function decode(reader, length, error) {
+                                GcsBackupSource.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.Cluster.GcsBackupSource();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -6708,7 +6948,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -6739,9 +6979,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                GcsBackupSource.verify = function verify(message) {
+                                GcsBackupSource.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.uris != null && message.hasOwnProperty("uris")) {
                                         if (!Array.isArray(message.uris))
                                             return "uris: array expected";
@@ -6760,9 +7004,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1.Cluster.GcsBackupSource} GcsBackupSource
                                  */
-                                GcsBackupSource.fromObject = function fromObject(object) {
+                                GcsBackupSource.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1.Cluster.GcsBackupSource)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1.Cluster.GcsBackupSource();
                                     if (object.uris) {
                                         if (!Array.isArray(object.uris))
@@ -6846,7 +7094,7 @@
                                 function ManagedBackupSource(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -6911,9 +7159,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                ManagedBackupSource.decode = function decode(reader, length, error) {
+                                ManagedBackupSource.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.Cluster.ManagedBackupSource();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -6925,7 +7177,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -6956,9 +7208,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                ManagedBackupSource.verify = function verify(message) {
+                                ManagedBackupSource.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.backup != null && message.hasOwnProperty("backup"))
                                         if (!$util.isString(message.backup))
                                             return "backup: string expected";
@@ -6973,9 +7229,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1.Cluster.ManagedBackupSource} ManagedBackupSource
                                  */
-                                ManagedBackupSource.fromObject = function fromObject(object) {
+                                ManagedBackupSource.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1.Cluster.ManagedBackupSource)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1.Cluster.ManagedBackupSource();
                                     if (object.backup != null)
                                         message.backup = String(object.backup);
@@ -7076,7 +7336,7 @@
                             function AutomatedBackupConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -7181,9 +7441,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            AutomatedBackupConfig.decode = function decode(reader, length, error) {
+                            AutomatedBackupConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -7191,7 +7455,7 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 2: {
-                                            message.fixedFrequencySchedule = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule.decode(reader, reader.uint32());
+                                            message.fixedFrequencySchedule = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 1: {
@@ -7199,11 +7463,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.retention = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                            message.retention = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -7234,14 +7498,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            AutomatedBackupConfig.verify = function verify(message) {
+                            AutomatedBackupConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.fixedFrequencySchedule != null && message.hasOwnProperty("fixedFrequencySchedule")) {
                                     properties.schedule = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule.verify(message.fixedFrequencySchedule);
+                                        var error = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule.verify(message.fixedFrequencySchedule, long + 1);
                                         if (error)
                                             return "fixedFrequencySchedule." + error;
                                     }
@@ -7258,7 +7526,7 @@
                                 if (message.retention != null && message.hasOwnProperty("retention")) {
                                     properties._retention = 1;
                                     {
-                                        var error = $root.google.protobuf.Duration.verify(message.retention);
+                                        var error = $root.google.protobuf.Duration.verify(message.retention, long + 1);
                                         if (error)
                                             return "retention." + error;
                                     }
@@ -7274,14 +7542,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.AutomatedBackupConfig} AutomatedBackupConfig
                              */
-                            AutomatedBackupConfig.fromObject = function fromObject(object) {
+                            AutomatedBackupConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig();
                                 if (object.fixedFrequencySchedule != null) {
                                     if (typeof object.fixedFrequencySchedule !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.AutomatedBackupConfig.fixedFrequencySchedule: object expected");
-                                    message.fixedFrequencySchedule = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule.fromObject(object.fixedFrequencySchedule);
+                                    message.fixedFrequencySchedule = $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule.fromObject(object.fixedFrequencySchedule, long + 1);
                                 }
                                 switch (object.automatedBackupMode) {
                                 default:
@@ -7306,7 +7578,7 @@
                                 if (object.retention != null) {
                                     if (typeof object.retention !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.AutomatedBackupConfig.retention: object expected");
-                                    message.retention = $root.google.protobuf.Duration.fromObject(object.retention);
+                                    message.retention = $root.google.protobuf.Duration.fromObject(object.retention, long + 1);
                                 }
                                 return message;
                             };
@@ -7387,7 +7659,7 @@
                                 function FixedFrequencySchedule(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -7461,9 +7733,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FixedFrequencySchedule.decode = function decode(reader, length, error) {
+                                FixedFrequencySchedule.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -7471,11 +7747,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 2: {
-                                                message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32());
+                                                message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -7506,14 +7782,18 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FixedFrequencySchedule.verify = function verify(message) {
+                                FixedFrequencySchedule.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.startTime != null && message.hasOwnProperty("startTime")) {
                                         properties._startTime = 1;
                                         {
-                                            var error = $root.google.type.TimeOfDay.verify(message.startTime);
+                                            var error = $root.google.type.TimeOfDay.verify(message.startTime, long + 1);
                                             if (error)
                                                 return "startTime." + error;
                                         }
@@ -7529,14 +7809,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule} FixedFrequencySchedule
                                  */
-                                FixedFrequencySchedule.fromObject = function fromObject(object) {
+                                FixedFrequencySchedule.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule();
                                     if (object.startTime != null) {
                                         if (typeof object.startTime !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.AutomatedBackupConfig.FixedFrequencySchedule.startTime: object expected");
-                                        message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime);
+                                        message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime, long + 1);
                                     }
                                     return message;
                                 };
@@ -7634,7 +7918,7 @@
                             function BackupCollection(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -7739,9 +8023,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BackupCollection.decode = function decode(reader, length, error) {
+                            BackupCollection.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.BackupCollection();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -7769,7 +8057,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -7800,9 +8088,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BackupCollection.verify = function verify(message) {
+                            BackupCollection.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -7829,9 +8121,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.BackupCollection} BackupCollection
                              */
-                            BackupCollection.fromObject = function fromObject(object) {
+                            BackupCollection.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.BackupCollection)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.BackupCollection();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -7943,7 +8239,7 @@
                                 this.backupFiles = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -8149,9 +8445,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            Backup.decode = function decode(reader, length, error) {
+                            Backup.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.Backup();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -8163,7 +8463,7 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -8179,7 +8479,7 @@
                                             break;
                                         }
                                     case 6: {
-                                            message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 7: {
@@ -8189,7 +8489,7 @@
                                     case 8: {
                                             if (!(message.backupFiles && message.backupFiles.length))
                                                 message.backupFiles = [];
-                                            message.backupFiles.push($root.google.cloud.redis.cluster.v1.BackupFile.decode(reader, reader.uint32()));
+                                            message.backupFiles.push($root.google.cloud.redis.cluster.v1.BackupFile.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 9: {
@@ -8213,7 +8513,7 @@
                                             break;
                                         }
                                     case 14: {
-                                            message.encryptionInfo = $root.google.cloud.redis.cluster.v1.EncryptionInfo.decode(reader, reader.uint32());
+                                            message.encryptionInfo = $root.google.cloud.redis.cluster.v1.EncryptionInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 15: {
@@ -8221,7 +8521,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -8252,14 +8552,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            Backup.verify = function verify(message) {
+                            Backup.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
                                 if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                     if (error)
                                         return "createTime." + error;
                                 }
@@ -8273,7 +8577,7 @@
                                     if (!$util.isInteger(message.totalSizeBytes) && !(message.totalSizeBytes && $util.isInteger(message.totalSizeBytes.low) && $util.isInteger(message.totalSizeBytes.high)))
                                         return "totalSizeBytes: integer|Long expected";
                                 if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                     if (error)
                                         return "expireTime." + error;
                                 }
@@ -8284,7 +8588,7 @@
                                     if (!Array.isArray(message.backupFiles))
                                         return "backupFiles: array expected";
                                     for (var i = 0; i < message.backupFiles.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.BackupFile.verify(message.backupFiles[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.BackupFile.verify(message.backupFiles[i], long + 1);
                                         if (error)
                                             return "backupFiles." + error;
                                     }
@@ -8330,7 +8634,7 @@
                                         break;
                                     }
                                 if (message.encryptionInfo != null && message.hasOwnProperty("encryptionInfo")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.EncryptionInfo.verify(message.encryptionInfo);
+                                    var error = $root.google.cloud.redis.cluster.v1.EncryptionInfo.verify(message.encryptionInfo, long + 1);
                                     if (error)
                                         return "encryptionInfo." + error;
                                 }
@@ -8348,16 +8652,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.Backup} Backup
                              */
-                            Backup.fromObject = function fromObject(object) {
+                            Backup.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.Backup)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.Backup();
                                 if (object.name != null)
                                     message.name = String(object.name);
                                 if (object.createTime != null) {
                                     if (typeof object.createTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Backup.createTime: object expected");
-                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                                 }
                                 if (object.cluster != null)
                                     message.cluster = String(object.cluster);
@@ -8375,7 +8683,7 @@
                                 if (object.expireTime != null) {
                                     if (typeof object.expireTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Backup.expireTime: object expected");
-                                    message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                    message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                                 }
                                 if (object.engineVersion != null)
                                     message.engineVersion = String(object.engineVersion);
@@ -8386,7 +8694,7 @@
                                     for (var i = 0; i < object.backupFiles.length; ++i) {
                                         if (typeof object.backupFiles[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.Backup.backupFiles: object expected");
-                                        message.backupFiles[i] = $root.google.cloud.redis.cluster.v1.BackupFile.fromObject(object.backupFiles[i]);
+                                        message.backupFiles[i] = $root.google.cloud.redis.cluster.v1.BackupFile.fromObject(object.backupFiles[i], long + 1);
                                     }
                                 }
                                 switch (object.nodeType) {
@@ -8484,7 +8792,7 @@
                                 if (object.encryptionInfo != null) {
                                     if (typeof object.encryptionInfo !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.Backup.encryptionInfo: object expected");
-                                    message.encryptionInfo = $root.google.cloud.redis.cluster.v1.EncryptionInfo.fromObject(object.encryptionInfo);
+                                    message.encryptionInfo = $root.google.cloud.redis.cluster.v1.EncryptionInfo.fromObject(object.encryptionInfo, long + 1);
                                 }
                                 if (object.uid != null)
                                     message.uid = String(object.uid);
@@ -8652,7 +8960,7 @@
                             function BackupFile(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -8737,9 +9045,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BackupFile.decode = function decode(reader, length, error) {
+                            BackupFile.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.BackupFile();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -8755,11 +9067,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -8790,9 +9102,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BackupFile.verify = function verify(message) {
+                            BackupFile.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.fileName != null && message.hasOwnProperty("fileName"))
                                     if (!$util.isString(message.fileName))
                                         return "fileName: string expected";
@@ -8800,7 +9116,7 @@
                                     if (!$util.isInteger(message.sizeBytes) && !(message.sizeBytes && $util.isInteger(message.sizeBytes.low) && $util.isInteger(message.sizeBytes.high)))
                                         return "sizeBytes: integer|Long expected";
                                 if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                     if (error)
                                         return "createTime." + error;
                                 }
@@ -8815,9 +9131,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.BackupFile} BackupFile
                              */
-                            BackupFile.fromObject = function fromObject(object) {
+                            BackupFile.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.BackupFile)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.BackupFile();
                                 if (object.fileName != null)
                                     message.fileName = String(object.fileName);
@@ -8833,7 +9153,7 @@
                                 if (object.createTime != null) {
                                     if (typeof object.createTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.BackupFile.createTime: object expected");
-                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                                 }
                                 return message;
                             };
@@ -8922,7 +9242,7 @@
                             function PscServiceAttachment(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -8997,9 +9317,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PscServiceAttachment.decode = function decode(reader, length, error) {
+                            PscServiceAttachment.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.PscServiceAttachment();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -9015,7 +9339,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -9046,9 +9370,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PscServiceAttachment.verify = function verify(message) {
+                            PscServiceAttachment.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.serviceAttachment != null && message.hasOwnProperty("serviceAttachment"))
                                     if (!$util.isString(message.serviceAttachment))
                                         return "serviceAttachment: string expected";
@@ -9073,9 +9401,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.PscServiceAttachment} PscServiceAttachment
                              */
-                            PscServiceAttachment.fromObject = function fromObject(object) {
+                            PscServiceAttachment.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.PscServiceAttachment)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.PscServiceAttachment();
                                 if (object.serviceAttachment != null)
                                     message.serviceAttachment = String(object.serviceAttachment);
@@ -9184,7 +9516,7 @@
                                 this.secondaryClusters = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -9290,9 +9622,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            CrossClusterReplicationConfig.decode = function decode(reader, length, error) {
+                            CrossClusterReplicationConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -9304,25 +9640,25 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.primaryCluster = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32());
+                                            message.primaryCluster = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
                                             if (!(message.secondaryClusters && message.secondaryClusters.length))
                                                 message.secondaryClusters = [];
-                                            message.secondaryClusters.push($root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32()));
+                                            message.secondaryClusters.push($root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 4: {
-                                            message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 5: {
-                                            message.membership = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership.decode(reader, reader.uint32());
+                                            message.membership = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -9353,9 +9689,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            CrossClusterReplicationConfig.verify = function verify(message) {
+                            CrossClusterReplicationConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.clusterRole != null && message.hasOwnProperty("clusterRole"))
                                     switch (message.clusterRole) {
                                     default:
@@ -9367,7 +9707,7 @@
                                         break;
                                     }
                                 if (message.primaryCluster != null && message.hasOwnProperty("primaryCluster")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.verify(message.primaryCluster);
+                                    var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.verify(message.primaryCluster, long + 1);
                                     if (error)
                                         return "primaryCluster." + error;
                                 }
@@ -9375,18 +9715,18 @@
                                     if (!Array.isArray(message.secondaryClusters))
                                         return "secondaryClusters: array expected";
                                     for (var i = 0; i < message.secondaryClusters.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.verify(message.secondaryClusters[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.verify(message.secondaryClusters[i], long + 1);
                                         if (error)
                                             return "secondaryClusters." + error;
                                     }
                                 }
                                 if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                     if (error)
                                         return "updateTime." + error;
                                 }
                                 if (message.membership != null && message.hasOwnProperty("membership")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership.verify(message.membership);
+                                    var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership.verify(message.membership, long + 1);
                                     if (error)
                                         return "membership." + error;
                                 }
@@ -9401,9 +9741,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.CrossClusterReplicationConfig} CrossClusterReplicationConfig
                              */
-                            CrossClusterReplicationConfig.fromObject = function fromObject(object) {
+                            CrossClusterReplicationConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig();
                                 switch (object.clusterRole) {
                                 default:
@@ -9432,7 +9776,7 @@
                                 if (object.primaryCluster != null) {
                                     if (typeof object.primaryCluster !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.primaryCluster: object expected");
-                                    message.primaryCluster = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.primaryCluster);
+                                    message.primaryCluster = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.primaryCluster, long + 1);
                                 }
                                 if (object.secondaryClusters) {
                                     if (!Array.isArray(object.secondaryClusters))
@@ -9441,18 +9785,18 @@
                                     for (var i = 0; i < object.secondaryClusters.length; ++i) {
                                         if (typeof object.secondaryClusters[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.secondaryClusters: object expected");
-                                        message.secondaryClusters[i] = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.secondaryClusters[i]);
+                                        message.secondaryClusters[i] = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.secondaryClusters[i], long + 1);
                                     }
                                 }
                                 if (object.updateTime != null) {
                                     if (typeof object.updateTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.updateTime: object expected");
-                                    message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                    message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                                 }
                                 if (object.membership != null) {
                                     if (typeof object.membership !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.membership: object expected");
-                                    message.membership = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership.fromObject(object.membership);
+                                    message.membership = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership.fromObject(object.membership, long + 1);
                                 }
                                 return message;
                             };
@@ -9541,7 +9885,7 @@
                                 function RemoteCluster(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -9616,9 +9960,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                RemoteCluster.decode = function decode(reader, length, error) {
+                                RemoteCluster.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -9634,7 +9982,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -9665,9 +10013,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                RemoteCluster.verify = function verify(message) {
+                                RemoteCluster.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.cluster != null && message.hasOwnProperty("cluster"))
                                         if (!$util.isString(message.cluster))
                                             return "cluster: string expected";
@@ -9685,9 +10037,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster} RemoteCluster
                                  */
-                                RemoteCluster.fromObject = function fromObject(object) {
+                                RemoteCluster.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster();
                                     if (object.cluster != null)
                                         message.cluster = String(object.cluster);
@@ -9771,7 +10127,7 @@
                                     this.secondaryClusters = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -9847,9 +10203,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                Membership.decode = function decode(reader, length, error) {
+                                Membership.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -9857,17 +10217,17 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.primaryCluster = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32());
+                                                message.primaryCluster = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         case 2: {
                                                 if (!(message.secondaryClusters && message.secondaryClusters.length))
                                                     message.secondaryClusters = [];
-                                                message.secondaryClusters.push($root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32()));
+                                                message.secondaryClusters.push($root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -9898,11 +10258,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                Membership.verify = function verify(message) {
+                                Membership.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.primaryCluster != null && message.hasOwnProperty("primaryCluster")) {
-                                        var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.verify(message.primaryCluster);
+                                        var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.verify(message.primaryCluster, long + 1);
                                         if (error)
                                             return "primaryCluster." + error;
                                     }
@@ -9910,7 +10274,7 @@
                                         if (!Array.isArray(message.secondaryClusters))
                                             return "secondaryClusters: array expected";
                                         for (var i = 0; i < message.secondaryClusters.length; ++i) {
-                                            var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.verify(message.secondaryClusters[i]);
+                                            var error = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.verify(message.secondaryClusters[i], long + 1);
                                             if (error)
                                                 return "secondaryClusters." + error;
                                         }
@@ -9926,14 +10290,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership} Membership
                                  */
-                                Membership.fromObject = function fromObject(object) {
+                                Membership.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership();
                                     if (object.primaryCluster != null) {
                                         if (typeof object.primaryCluster !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership.primaryCluster: object expected");
-                                        message.primaryCluster = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.primaryCluster);
+                                        message.primaryCluster = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.primaryCluster, long + 1);
                                     }
                                     if (object.secondaryClusters) {
                                         if (!Array.isArray(object.secondaryClusters))
@@ -9942,7 +10310,7 @@
                                         for (var i = 0; i < object.secondaryClusters.length; ++i) {
                                             if (typeof object.secondaryClusters[i] !== "object")
                                                 throw TypeError(".google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.Membership.secondaryClusters: object expected");
-                                            message.secondaryClusters[i] = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.secondaryClusters[i]);
+                                            message.secondaryClusters[i] = $root.google.cloud.redis.cluster.v1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.secondaryClusters[i], long + 1);
                                         }
                                     }
                                     return message;
@@ -10048,7 +10416,7 @@
                                 this.weeklyMaintenanceWindow = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -10134,9 +10502,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ClusterMaintenancePolicy.decode = function decode(reader, length, error) {
+                            ClusterMaintenancePolicy.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ClusterMaintenancePolicy();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -10144,21 +10516,21 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
                                             if (!(message.weeklyMaintenanceWindow && message.weeklyMaintenanceWindow.length))
                                                 message.weeklyMaintenanceWindow = [];
-                                            message.weeklyMaintenanceWindow.push($root.google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow.decode(reader, reader.uint32()));
+                                            message.weeklyMaintenanceWindow.push($root.google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -10189,16 +10561,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ClusterMaintenancePolicy.verify = function verify(message) {
+                            ClusterMaintenancePolicy.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                     if (error)
                                         return "createTime." + error;
                                 }
                                 if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                     if (error)
                                         return "updateTime." + error;
                                 }
@@ -10206,7 +10582,7 @@
                                     if (!Array.isArray(message.weeklyMaintenanceWindow))
                                         return "weeklyMaintenanceWindow: array expected";
                                     for (var i = 0; i < message.weeklyMaintenanceWindow.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow.verify(message.weeklyMaintenanceWindow[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow.verify(message.weeklyMaintenanceWindow[i], long + 1);
                                         if (error)
                                             return "weeklyMaintenanceWindow." + error;
                                     }
@@ -10222,19 +10598,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ClusterMaintenancePolicy} ClusterMaintenancePolicy
                              */
-                            ClusterMaintenancePolicy.fromObject = function fromObject(object) {
+                            ClusterMaintenancePolicy.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ClusterMaintenancePolicy)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ClusterMaintenancePolicy();
                                 if (object.createTime != null) {
                                     if (typeof object.createTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.ClusterMaintenancePolicy.createTime: object expected");
-                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                                 }
                                 if (object.updateTime != null) {
                                     if (typeof object.updateTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.ClusterMaintenancePolicy.updateTime: object expected");
-                                    message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                    message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                                 }
                                 if (object.weeklyMaintenanceWindow) {
                                     if (!Array.isArray(object.weeklyMaintenanceWindow))
@@ -10243,7 +10623,7 @@
                                     for (var i = 0; i < object.weeklyMaintenanceWindow.length; ++i) {
                                         if (typeof object.weeklyMaintenanceWindow[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.ClusterMaintenancePolicy.weeklyMaintenanceWindow: object expected");
-                                        message.weeklyMaintenanceWindow[i] = $root.google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow.fromObject(object.weeklyMaintenanceWindow[i]);
+                                        message.weeklyMaintenanceWindow[i] = $root.google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow.fromObject(object.weeklyMaintenanceWindow[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -10330,7 +10710,7 @@
                             function ClusterWeeklyMaintenanceWindow(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -10405,9 +10785,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ClusterWeeklyMaintenanceWindow.decode = function decode(reader, length, error) {
+                            ClusterWeeklyMaintenanceWindow.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -10419,11 +10803,11 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32());
+                                            message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -10454,9 +10838,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ClusterWeeklyMaintenanceWindow.verify = function verify(message) {
+                            ClusterWeeklyMaintenanceWindow.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.day != null && message.hasOwnProperty("day"))
                                     switch (message.day) {
                                     default:
@@ -10472,7 +10860,7 @@
                                         break;
                                     }
                                 if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                    var error = $root.google.type.TimeOfDay.verify(message.startTime);
+                                    var error = $root.google.type.TimeOfDay.verify(message.startTime, long + 1);
                                     if (error)
                                         return "startTime." + error;
                                 }
@@ -10487,9 +10875,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow} ClusterWeeklyMaintenanceWindow
                              */
-                            ClusterWeeklyMaintenanceWindow.fromObject = function fromObject(object) {
+                            ClusterWeeklyMaintenanceWindow.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow();
                                 switch (object.day) {
                                 default:
@@ -10534,7 +10926,7 @@
                                 if (object.startTime != null) {
                                     if (typeof object.startTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.ClusterWeeklyMaintenanceWindow.startTime: object expected");
-                                    message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime);
+                                    message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime, long + 1);
                                 }
                                 return message;
                             };
@@ -10613,7 +11005,7 @@
                             function ClusterMaintenanceSchedule(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -10688,9 +11080,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ClusterMaintenanceSchedule.decode = function decode(reader, length, error) {
+                            ClusterMaintenanceSchedule.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -10698,15 +11094,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -10737,16 +11133,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ClusterMaintenanceSchedule.verify = function verify(message) {
+                            ClusterMaintenanceSchedule.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                     if (error)
                                         return "startTime." + error;
                                 }
                                 if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                     if (error)
                                         return "endTime." + error;
                                 }
@@ -10761,19 +11161,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule} ClusterMaintenanceSchedule
                              */
-                            ClusterMaintenanceSchedule.fromObject = function fromObject(object) {
+                            ClusterMaintenanceSchedule.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule();
                                 if (object.startTime != null) {
                                     if (typeof object.startTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule.startTime: object expected");
-                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                                 }
                                 if (object.endTime != null) {
                                     if (typeof object.endTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.ClusterMaintenanceSchedule.endTime: object expected");
-                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                                 }
                                 return message;
                             };
@@ -10851,7 +11255,7 @@
                             function PscConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -10916,9 +11320,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PscConfig.decode = function decode(reader, length, error) {
+                            PscConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.PscConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -10930,7 +11338,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -10961,9 +11369,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PscConfig.verify = function verify(message) {
+                            PscConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.network != null && message.hasOwnProperty("network"))
                                     if (!$util.isString(message.network))
                                         return "network: string expected";
@@ -10978,9 +11390,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.PscConfig} PscConfig
                              */
-                            PscConfig.fromObject = function fromObject(object) {
+                            PscConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.PscConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.PscConfig();
                                 if (object.network != null)
                                     message.network = String(object.network);
@@ -11058,7 +11474,7 @@
                             function DiscoveryEndpoint(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -11143,9 +11559,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DiscoveryEndpoint.decode = function decode(reader, length, error) {
+                            DiscoveryEndpoint.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.DiscoveryEndpoint();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -11161,11 +11581,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.pscConfig = $root.google.cloud.redis.cluster.v1.PscConfig.decode(reader, reader.uint32());
+                                            message.pscConfig = $root.google.cloud.redis.cluster.v1.PscConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -11196,9 +11616,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DiscoveryEndpoint.verify = function verify(message) {
+                            DiscoveryEndpoint.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.address != null && message.hasOwnProperty("address"))
                                     if (!$util.isString(message.address))
                                         return "address: string expected";
@@ -11206,7 +11630,7 @@
                                     if (!$util.isInteger(message.port))
                                         return "port: integer expected";
                                 if (message.pscConfig != null && message.hasOwnProperty("pscConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.PscConfig.verify(message.pscConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1.PscConfig.verify(message.pscConfig, long + 1);
                                     if (error)
                                         return "pscConfig." + error;
                                 }
@@ -11221,9 +11645,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.DiscoveryEndpoint} DiscoveryEndpoint
                              */
-                            DiscoveryEndpoint.fromObject = function fromObject(object) {
+                            DiscoveryEndpoint.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.DiscoveryEndpoint)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.DiscoveryEndpoint();
                                 if (object.address != null)
                                     message.address = String(object.address);
@@ -11232,7 +11660,7 @@
                                 if (object.pscConfig != null) {
                                     if (typeof object.pscConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.DiscoveryEndpoint.pscConfig: object expected");
-                                    message.pscConfig = $root.google.cloud.redis.cluster.v1.PscConfig.fromObject(object.pscConfig);
+                                    message.pscConfig = $root.google.cloud.redis.cluster.v1.PscConfig.fromObject(object.pscConfig, long + 1);
                                 }
                                 return message;
                             };
@@ -11320,7 +11748,7 @@
                             function PscConnection(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -11455,9 +11883,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PscConnection.decode = function decode(reader, length, error) {
+                            PscConnection.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.PscConnection();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -11497,7 +11929,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -11528,9 +11960,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PscConnection.verify = function verify(message) {
+                            PscConnection.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.pscConnectionId != null && message.hasOwnProperty("pscConnectionId"))
                                     if (!$util.isString(message.pscConnectionId))
                                         return "pscConnectionId: string expected";
@@ -11579,9 +12015,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.PscConnection} PscConnection
                              */
-                            PscConnection.fromObject = function fromObject(object) {
+                            PscConnection.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.PscConnection)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.PscConnection();
                                 if (object.pscConnectionId != null)
                                     message.pscConnectionId = String(object.pscConnectionId);
@@ -11734,7 +12174,7 @@
                                 this.connections = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -11800,9 +12240,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ClusterEndpoint.decode = function decode(reader, length, error) {
+                            ClusterEndpoint.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ClusterEndpoint();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -11812,11 +12256,11 @@
                                     case 1: {
                                             if (!(message.connections && message.connections.length))
                                                 message.connections = [];
-                                            message.connections.push($root.google.cloud.redis.cluster.v1.ConnectionDetail.decode(reader, reader.uint32()));
+                                            message.connections.push($root.google.cloud.redis.cluster.v1.ConnectionDetail.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -11847,14 +12291,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ClusterEndpoint.verify = function verify(message) {
+                            ClusterEndpoint.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.connections != null && message.hasOwnProperty("connections")) {
                                     if (!Array.isArray(message.connections))
                                         return "connections: array expected";
                                     for (var i = 0; i < message.connections.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1.ConnectionDetail.verify(message.connections[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1.ConnectionDetail.verify(message.connections[i], long + 1);
                                         if (error)
                                             return "connections." + error;
                                     }
@@ -11870,9 +12318,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ClusterEndpoint} ClusterEndpoint
                              */
-                            ClusterEndpoint.fromObject = function fromObject(object) {
+                            ClusterEndpoint.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ClusterEndpoint)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ClusterEndpoint();
                                 if (object.connections) {
                                     if (!Array.isArray(object.connections))
@@ -11881,7 +12333,7 @@
                                     for (var i = 0; i < object.connections.length; ++i) {
                                         if (typeof object.connections[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.ClusterEndpoint.connections: object expected");
-                                        message.connections[i] = $root.google.cloud.redis.cluster.v1.ConnectionDetail.fromObject(object.connections[i]);
+                                        message.connections[i] = $root.google.cloud.redis.cluster.v1.ConnectionDetail.fromObject(object.connections[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -11960,7 +12412,7 @@
                             function ConnectionDetail(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -12049,9 +12501,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConnectionDetail.decode = function decode(reader, length, error) {
+                            ConnectionDetail.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ConnectionDetail();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -12059,15 +12515,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.pscAutoConnection = $root.google.cloud.redis.cluster.v1.PscAutoConnection.decode(reader, reader.uint32());
+                                            message.pscAutoConnection = $root.google.cloud.redis.cluster.v1.PscAutoConnection.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.pscConnection = $root.google.cloud.redis.cluster.v1.PscConnection.decode(reader, reader.uint32());
+                                            message.pscConnection = $root.google.cloud.redis.cluster.v1.PscConnection.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -12098,14 +12554,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConnectionDetail.verify = function verify(message) {
+                            ConnectionDetail.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.pscAutoConnection != null && message.hasOwnProperty("pscAutoConnection")) {
                                     properties.connection = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1.PscAutoConnection.verify(message.pscAutoConnection);
+                                        var error = $root.google.cloud.redis.cluster.v1.PscAutoConnection.verify(message.pscAutoConnection, long + 1);
                                         if (error)
                                             return "pscAutoConnection." + error;
                                     }
@@ -12115,7 +12575,7 @@
                                         return "connection: multiple values";
                                     properties.connection = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1.PscConnection.verify(message.pscConnection);
+                                        var error = $root.google.cloud.redis.cluster.v1.PscConnection.verify(message.pscConnection, long + 1);
                                         if (error)
                                             return "pscConnection." + error;
                                     }
@@ -12131,19 +12591,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ConnectionDetail} ConnectionDetail
                              */
-                            ConnectionDetail.fromObject = function fromObject(object) {
+                            ConnectionDetail.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ConnectionDetail)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ConnectionDetail();
                                 if (object.pscAutoConnection != null) {
                                     if (typeof object.pscAutoConnection !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.ConnectionDetail.pscAutoConnection: object expected");
-                                    message.pscAutoConnection = $root.google.cloud.redis.cluster.v1.PscAutoConnection.fromObject(object.pscAutoConnection);
+                                    message.pscAutoConnection = $root.google.cloud.redis.cluster.v1.PscAutoConnection.fromObject(object.pscAutoConnection, long + 1);
                                 }
                                 if (object.pscConnection != null) {
                                     if (typeof object.pscConnection !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.ConnectionDetail.pscConnection: object expected");
-                                    message.pscConnection = $root.google.cloud.redis.cluster.v1.PscConnection.fromObject(object.pscConnection);
+                                    message.pscConnection = $root.google.cloud.redis.cluster.v1.PscConnection.fromObject(object.pscConnection, long + 1);
                                 }
                                 return message;
                             };
@@ -12230,7 +12694,7 @@
                             function PscAutoConnection(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -12365,9 +12829,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PscAutoConnection.decode = function decode(reader, length, error) {
+                            PscAutoConnection.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.PscAutoConnection();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -12407,7 +12875,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -12438,9 +12906,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PscAutoConnection.verify = function verify(message) {
+                            PscAutoConnection.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.pscConnectionId != null && message.hasOwnProperty("pscConnectionId"))
                                     if (!$util.isString(message.pscConnectionId))
                                         return "pscConnectionId: string expected";
@@ -12489,9 +12961,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.PscAutoConnection} PscAutoConnection
                              */
-                            PscAutoConnection.fromObject = function fromObject(object) {
+                            PscAutoConnection.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.PscAutoConnection)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.PscAutoConnection();
                                 if (object.pscConnectionId != null)
                                     message.pscConnectionId = String(object.pscConnectionId);
@@ -12644,7 +13120,7 @@
                             function SharedRegionalCertificateAuthority(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -12733,9 +13209,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SharedRegionalCertificateAuthority.decode = function decode(reader, length, error) {
+                            SharedRegionalCertificateAuthority.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -12743,7 +13223,7 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 2: {
-                                            message.managedServerCa = $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.decode(reader, reader.uint32());
+                                            message.managedServerCa = $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 1: {
@@ -12751,7 +13231,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -12782,14 +13262,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SharedRegionalCertificateAuthority.verify = function verify(message) {
+                            SharedRegionalCertificateAuthority.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.managedServerCa != null && message.hasOwnProperty("managedServerCa")) {
                                     properties.serverCa = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.verify(message.managedServerCa);
+                                        var error = $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.verify(message.managedServerCa, long + 1);
                                         if (error)
                                             return "managedServerCa." + error;
                                     }
@@ -12808,14 +13292,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority} SharedRegionalCertificateAuthority
                              */
-                            SharedRegionalCertificateAuthority.fromObject = function fromObject(object) {
+                            SharedRegionalCertificateAuthority.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority();
                                 if (object.managedServerCa != null) {
                                     if (typeof object.managedServerCa !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.managedServerCa: object expected");
-                                    message.managedServerCa = $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.fromObject(object.managedServerCa);
+                                    message.managedServerCa = $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.fromObject(object.managedServerCa, long + 1);
                                 }
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -12894,7 +13382,7 @@
                                     this.caCerts = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -12960,9 +13448,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                RegionalManagedCertificateAuthority.decode = function decode(reader, length, error) {
+                                RegionalManagedCertificateAuthority.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -12972,11 +13464,11 @@
                                         case 1: {
                                                 if (!(message.caCerts && message.caCerts.length))
                                                     message.caCerts = [];
-                                                message.caCerts.push($root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.decode(reader, reader.uint32()));
+                                                message.caCerts.push($root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -13007,14 +13499,18 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                RegionalManagedCertificateAuthority.verify = function verify(message) {
+                                RegionalManagedCertificateAuthority.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.caCerts != null && message.hasOwnProperty("caCerts")) {
                                         if (!Array.isArray(message.caCerts))
                                             return "caCerts: array expected";
                                         for (var i = 0; i < message.caCerts.length; ++i) {
-                                            var error = $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.verify(message.caCerts[i]);
+                                            var error = $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.verify(message.caCerts[i], long + 1);
                                             if (error)
                                                 return "caCerts." + error;
                                         }
@@ -13030,9 +13526,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority} RegionalManagedCertificateAuthority
                                  */
-                                RegionalManagedCertificateAuthority.fromObject = function fromObject(object) {
+                                RegionalManagedCertificateAuthority.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority();
                                     if (object.caCerts) {
                                         if (!Array.isArray(object.caCerts))
@@ -13041,7 +13541,7 @@
                                         for (var i = 0; i < object.caCerts.length; ++i) {
                                             if (typeof object.caCerts[i] !== "object")
                                                 throw TypeError(".google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.caCerts: object expected");
-                                            message.caCerts[i] = $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.fromObject(object.caCerts[i]);
+                                            message.caCerts[i] = $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.fromObject(object.caCerts[i], long + 1);
                                         }
                                     }
                                     return message;
@@ -13117,7 +13617,7 @@
                                         this.certificates = [];
                                         if (properties)
                                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                                if (properties[keys[i]] != null)
+                                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                     this[keys[i]] = properties[keys[i]];
                                     }
     
@@ -13183,9 +13683,13 @@
                                      * @throws {Error} If the payload is not a reader or valid buffer
                                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                      */
-                                    RegionalCertChain.decode = function decode(reader, length, error) {
+                                    RegionalCertChain.decode = function decode(reader, length, error, long) {
                                         if (!(reader instanceof $Reader))
                                             reader = $Reader.create(reader);
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $Reader.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain();
                                         while (reader.pos < end) {
                                             var tag = reader.uint32();
@@ -13199,7 +13703,7 @@
                                                     break;
                                                 }
                                             default:
-                                                reader.skipType(tag & 7);
+                                                reader.skipType(tag & 7, long);
                                                 break;
                                             }
                                         }
@@ -13230,9 +13734,13 @@
                                      * @param {Object.<string,*>} message Plain object to verify
                                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                      */
-                                    RegionalCertChain.verify = function verify(message) {
+                                    RegionalCertChain.verify = function verify(message, long) {
                                         if (typeof message !== "object" || message === null)
                                             return "object expected";
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            return "maximum nesting depth exceeded";
                                         if (message.certificates != null && message.hasOwnProperty("certificates")) {
                                             if (!Array.isArray(message.certificates))
                                                 return "certificates: array expected";
@@ -13251,9 +13759,13 @@
                                      * @param {Object.<string,*>} object Plain object
                                      * @returns {google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain} RegionalCertChain
                                      */
-                                    RegionalCertChain.fromObject = function fromObject(object) {
+                                    RegionalCertChain.fromObject = function fromObject(object, long) {
                                         if (object instanceof $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain)
                                             return object;
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var message = new $root.google.cloud.redis.cluster.v1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain();
                                         if (object.certificates) {
                                             if (!Array.isArray(object.certificates))
@@ -13343,7 +13855,7 @@
                             function GetSharedRegionalCertificateAuthorityRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -13408,9 +13920,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GetSharedRegionalCertificateAuthorityRequest.decode = function decode(reader, length, error) {
+                            GetSharedRegionalCertificateAuthorityRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.GetSharedRegionalCertificateAuthorityRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -13422,7 +13938,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -13453,9 +13969,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GetSharedRegionalCertificateAuthorityRequest.verify = function verify(message) {
+                            GetSharedRegionalCertificateAuthorityRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -13470,9 +13990,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.GetSharedRegionalCertificateAuthorityRequest} GetSharedRegionalCertificateAuthorityRequest
                              */
-                            GetSharedRegionalCertificateAuthorityRequest.fromObject = function fromObject(object) {
+                            GetSharedRegionalCertificateAuthorityRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.GetSharedRegionalCertificateAuthorityRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.GetSharedRegionalCertificateAuthorityRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -13554,7 +14078,7 @@
                             function OperationMetadata(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -13679,9 +14203,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            OperationMetadata.decode = function decode(reader, length, error) {
+                            OperationMetadata.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.OperationMetadata();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -13689,11 +14217,11 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -13717,7 +14245,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -13748,16 +14276,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            OperationMetadata.verify = function verify(message) {
+                            OperationMetadata.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                     if (error)
                                         return "createTime." + error;
                                 }
                                 if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                     if (error)
                                         return "endTime." + error;
                                 }
@@ -13787,19 +14319,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.OperationMetadata} OperationMetadata
                              */
-                            OperationMetadata.fromObject = function fromObject(object) {
+                            OperationMetadata.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.OperationMetadata)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.OperationMetadata();
                                 if (object.createTime != null) {
                                     if (typeof object.createTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.OperationMetadata.createTime: object expected");
-                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                                 }
                                 if (object.endTime != null) {
                                     if (typeof object.endTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.OperationMetadata.endTime: object expected");
-                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                                 }
                                 if (object.target != null)
                                     message.target = String(object.target);
@@ -13903,7 +14439,7 @@
                             function CertificateAuthority(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -13992,9 +14528,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            CertificateAuthority.decode = function decode(reader, length, error) {
+                            CertificateAuthority.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.CertificateAuthority();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -14002,7 +14542,7 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.managedServerCa = $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.decode(reader, reader.uint32());
+                                            message.managedServerCa = $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
@@ -14010,7 +14550,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -14041,14 +14581,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            CertificateAuthority.verify = function verify(message) {
+                            CertificateAuthority.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.managedServerCa != null && message.hasOwnProperty("managedServerCa")) {
                                     properties.serverCa = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.verify(message.managedServerCa);
+                                        var error = $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.verify(message.managedServerCa, long + 1);
                                         if (error)
                                             return "managedServerCa." + error;
                                     }
@@ -14067,14 +14611,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.CertificateAuthority} CertificateAuthority
                              */
-                            CertificateAuthority.fromObject = function fromObject(object) {
+                            CertificateAuthority.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.CertificateAuthority)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.CertificateAuthority();
                                 if (object.managedServerCa != null) {
                                     if (typeof object.managedServerCa !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.CertificateAuthority.managedServerCa: object expected");
-                                    message.managedServerCa = $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.fromObject(object.managedServerCa);
+                                    message.managedServerCa = $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.fromObject(object.managedServerCa, long + 1);
                                 }
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -14153,7 +14701,7 @@
                                     this.caCerts = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -14219,9 +14767,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                ManagedCertificateAuthority.decode = function decode(reader, length, error) {
+                                ManagedCertificateAuthority.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -14231,11 +14783,11 @@
                                         case 1: {
                                                 if (!(message.caCerts && message.caCerts.length))
                                                     message.caCerts = [];
-                                                message.caCerts.push($root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain.decode(reader, reader.uint32()));
+                                                message.caCerts.push($root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -14266,14 +14818,18 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                ManagedCertificateAuthority.verify = function verify(message) {
+                                ManagedCertificateAuthority.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.caCerts != null && message.hasOwnProperty("caCerts")) {
                                         if (!Array.isArray(message.caCerts))
                                             return "caCerts: array expected";
                                         for (var i = 0; i < message.caCerts.length; ++i) {
-                                            var error = $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain.verify(message.caCerts[i]);
+                                            var error = $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain.verify(message.caCerts[i], long + 1);
                                             if (error)
                                                 return "caCerts." + error;
                                         }
@@ -14289,9 +14845,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority} ManagedCertificateAuthority
                                  */
-                                ManagedCertificateAuthority.fromObject = function fromObject(object) {
+                                ManagedCertificateAuthority.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority();
                                     if (object.caCerts) {
                                         if (!Array.isArray(object.caCerts))
@@ -14300,7 +14860,7 @@
                                         for (var i = 0; i < object.caCerts.length; ++i) {
                                             if (typeof object.caCerts[i] !== "object")
                                                 throw TypeError(".google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.caCerts: object expected");
-                                            message.caCerts[i] = $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain.fromObject(object.caCerts[i]);
+                                            message.caCerts[i] = $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain.fromObject(object.caCerts[i], long + 1);
                                         }
                                     }
                                     return message;
@@ -14376,7 +14936,7 @@
                                         this.certificates = [];
                                         if (properties)
                                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                                if (properties[keys[i]] != null)
+                                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                     this[keys[i]] = properties[keys[i]];
                                     }
     
@@ -14442,9 +15002,13 @@
                                      * @throws {Error} If the payload is not a reader or valid buffer
                                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                      */
-                                    CertChain.decode = function decode(reader, length, error) {
+                                    CertChain.decode = function decode(reader, length, error, long) {
                                         if (!(reader instanceof $Reader))
                                             reader = $Reader.create(reader);
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $Reader.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain();
                                         while (reader.pos < end) {
                                             var tag = reader.uint32();
@@ -14458,7 +15022,7 @@
                                                     break;
                                                 }
                                             default:
-                                                reader.skipType(tag & 7);
+                                                reader.skipType(tag & 7, long);
                                                 break;
                                             }
                                         }
@@ -14489,9 +15053,13 @@
                                      * @param {Object.<string,*>} message Plain object to verify
                                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                      */
-                                    CertChain.verify = function verify(message) {
+                                    CertChain.verify = function verify(message, long) {
                                         if (typeof message !== "object" || message === null)
                                             return "object expected";
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            return "maximum nesting depth exceeded";
                                         if (message.certificates != null && message.hasOwnProperty("certificates")) {
                                             if (!Array.isArray(message.certificates))
                                                 return "certificates: array expected";
@@ -14510,9 +15078,13 @@
                                      * @param {Object.<string,*>} object Plain object
                                      * @returns {google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain} CertChain
                                      */
-                                    CertChain.fromObject = function fromObject(object) {
+                                    CertChain.fromObject = function fromObject(object, long) {
                                         if (object instanceof $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain)
                                             return object;
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var message = new $root.google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain();
                                         if (object.certificates) {
                                             if (!Array.isArray(object.certificates))
@@ -14604,7 +15176,7 @@
                             function ClusterPersistenceConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -14689,9 +15261,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ClusterPersistenceConfig.decode = function decode(reader, length, error) {
+                            ClusterPersistenceConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -14703,15 +15279,15 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.rdbConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.decode(reader, reader.uint32());
+                                            message.rdbConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
-                                            message.aofConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig.decode(reader, reader.uint32());
+                                            message.aofConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -14742,9 +15318,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ClusterPersistenceConfig.verify = function verify(message) {
+                            ClusterPersistenceConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -14756,12 +15336,12 @@
                                         break;
                                     }
                                 if (message.rdbConfig != null && message.hasOwnProperty("rdbConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.verify(message.rdbConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.verify(message.rdbConfig, long + 1);
                                     if (error)
                                         return "rdbConfig." + error;
                                 }
                                 if (message.aofConfig != null && message.hasOwnProperty("aofConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig.verify(message.aofConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig.verify(message.aofConfig, long + 1);
                                     if (error)
                                         return "aofConfig." + error;
                                 }
@@ -14776,9 +15356,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ClusterPersistenceConfig} ClusterPersistenceConfig
                              */
-                            ClusterPersistenceConfig.fromObject = function fromObject(object) {
+                            ClusterPersistenceConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig();
                                 switch (object.mode) {
                                 default:
@@ -14807,12 +15391,12 @@
                                 if (object.rdbConfig != null) {
                                     if (typeof object.rdbConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.ClusterPersistenceConfig.rdbConfig: object expected");
-                                    message.rdbConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.fromObject(object.rdbConfig);
+                                    message.rdbConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.fromObject(object.rdbConfig, long + 1);
                                 }
                                 if (object.aofConfig != null) {
                                     if (typeof object.aofConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.ClusterPersistenceConfig.aofConfig: object expected");
-                                    message.aofConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig.fromObject(object.aofConfig);
+                                    message.aofConfig = $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig.fromObject(object.aofConfig, long + 1);
                                 }
                                 return message;
                             };
@@ -14891,7 +15475,7 @@
                                 function RDBConfig(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -14966,9 +15550,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                RDBConfig.decode = function decode(reader, length, error) {
+                                RDBConfig.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -14980,11 +15568,11 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                                message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -15015,9 +15603,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                RDBConfig.verify = function verify(message) {
+                                RDBConfig.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.rdbSnapshotPeriod != null && message.hasOwnProperty("rdbSnapshotPeriod"))
                                         switch (message.rdbSnapshotPeriod) {
                                         default:
@@ -15030,7 +15622,7 @@
                                             break;
                                         }
                                     if (message.rdbSnapshotStartTime != null && message.hasOwnProperty("rdbSnapshotStartTime")) {
-                                        var error = $root.google.protobuf.Timestamp.verify(message.rdbSnapshotStartTime);
+                                        var error = $root.google.protobuf.Timestamp.verify(message.rdbSnapshotStartTime, long + 1);
                                         if (error)
                                             return "rdbSnapshotStartTime." + error;
                                     }
@@ -15045,9 +15637,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig} RDBConfig
                                  */
-                                RDBConfig.fromObject = function fromObject(object) {
+                                RDBConfig.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig();
                                     switch (object.rdbSnapshotPeriod) {
                                     default:
@@ -15080,7 +15676,7 @@
                                     if (object.rdbSnapshotStartTime != null) {
                                         if (typeof object.rdbSnapshotStartTime !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.rdbSnapshotStartTime: object expected");
-                                        message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.fromObject(object.rdbSnapshotStartTime);
+                                        message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.fromObject(object.rdbSnapshotStartTime, long + 1);
                                     }
                                     return message;
                                 };
@@ -15178,7 +15774,7 @@
                                 function AOFConfig(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -15243,9 +15839,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                AOFConfig.decode = function decode(reader, length, error) {
+                                AOFConfig.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -15257,7 +15857,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -15288,9 +15888,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                AOFConfig.verify = function verify(message) {
+                                AOFConfig.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.appendFsync != null && message.hasOwnProperty("appendFsync"))
                                         switch (message.appendFsync) {
                                         default:
@@ -15312,9 +15916,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig} AOFConfig
                                  */
-                                AOFConfig.fromObject = function fromObject(object) {
+                                AOFConfig.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig();
                                     switch (object.appendFsync) {
                                     default:
@@ -15452,7 +16060,7 @@
                             function ZoneDistributionConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -15527,9 +16135,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ZoneDistributionConfig.decode = function decode(reader, length, error) {
+                            ZoneDistributionConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.ZoneDistributionConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -15545,7 +16157,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -15576,9 +16188,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ZoneDistributionConfig.verify = function verify(message) {
+                            ZoneDistributionConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -15602,9 +16218,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.ZoneDistributionConfig} ZoneDistributionConfig
                              */
-                            ZoneDistributionConfig.fromObject = function fromObject(object) {
+                            ZoneDistributionConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.ZoneDistributionConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.ZoneDistributionConfig();
                                 switch (object.mode) {
                                 default:
@@ -15722,7 +16342,7 @@
                             function RescheduleClusterMaintenanceRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -15807,9 +16427,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RescheduleClusterMaintenanceRequest.decode = function decode(reader, length, error) {
+                            RescheduleClusterMaintenanceRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.RescheduleClusterMaintenanceRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -15825,11 +16449,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.scheduleTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.scheduleTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -15860,9 +16484,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RescheduleClusterMaintenanceRequest.verify = function verify(message) {
+                            RescheduleClusterMaintenanceRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -15876,7 +16504,7 @@
                                         break;
                                     }
                                 if (message.scheduleTime != null && message.hasOwnProperty("scheduleTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.scheduleTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.scheduleTime, long + 1);
                                     if (error)
                                         return "scheduleTime." + error;
                                 }
@@ -15891,9 +16519,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.RescheduleClusterMaintenanceRequest} RescheduleClusterMaintenanceRequest
                              */
-                            RescheduleClusterMaintenanceRequest.fromObject = function fromObject(object) {
+                            RescheduleClusterMaintenanceRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.RescheduleClusterMaintenanceRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.RescheduleClusterMaintenanceRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -15920,7 +16552,7 @@
                                 if (object.scheduleTime != null) {
                                     if (typeof object.scheduleTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.RescheduleClusterMaintenanceRequest.scheduleTime: object expected");
-                                    message.scheduleTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleTime);
+                                    message.scheduleTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleTime, long + 1);
                                 }
                                 return message;
                             };
@@ -16021,7 +16653,7 @@
                                 this.kmsKeyVersions = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -16117,9 +16749,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            EncryptionInfo.decode = function decode(reader, length, error) {
+                            EncryptionInfo.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1.EncryptionInfo();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -16141,11 +16777,11 @@
                                             break;
                                         }
                                     case 4: {
-                                            message.lastUpdateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.lastUpdateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -16176,9 +16812,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            EncryptionInfo.verify = function verify(message) {
+                            EncryptionInfo.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.encryptionType != null && message.hasOwnProperty("encryptionType"))
                                     switch (message.encryptionType) {
                                     default:
@@ -16211,7 +16851,7 @@
                                         break;
                                     }
                                 if (message.lastUpdateTime != null && message.hasOwnProperty("lastUpdateTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.lastUpdateTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.lastUpdateTime, long + 1);
                                     if (error)
                                         return "lastUpdateTime." + error;
                                 }
@@ -16226,9 +16866,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1.EncryptionInfo} EncryptionInfo
                              */
-                            EncryptionInfo.fromObject = function fromObject(object) {
+                            EncryptionInfo.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1.EncryptionInfo)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1.EncryptionInfo();
                                 switch (object.encryptionType) {
                                 default:
@@ -16304,7 +16948,7 @@
                                 if (object.lastUpdateTime != null) {
                                     if (typeof object.lastUpdateTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1.EncryptionInfo.lastUpdateTime: object expected");
-                                    message.lastUpdateTime = $root.google.protobuf.Timestamp.fromObject(object.lastUpdateTime);
+                                    message.lastUpdateTime = $root.google.protobuf.Timestamp.fromObject(object.lastUpdateTime, long + 1);
                                 }
                                 return message;
                             };
@@ -17091,7 +17735,7 @@
                             function CreateClusterRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -17186,9 +17830,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            CreateClusterRequest.decode = function decode(reader, length, error) {
+                            CreateClusterRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.CreateClusterRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -17204,7 +17852,7 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.cluster = $root.google.cloud.redis.cluster.v1beta1.Cluster.decode(reader, reader.uint32());
+                                            message.cluster = $root.google.cloud.redis.cluster.v1beta1.Cluster.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 4: {
@@ -17212,7 +17860,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -17243,9 +17891,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            CreateClusterRequest.verify = function verify(message) {
+                            CreateClusterRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.parent != null && message.hasOwnProperty("parent"))
                                     if (!$util.isString(message.parent))
                                         return "parent: string expected";
@@ -17253,7 +17905,7 @@
                                     if (!$util.isString(message.clusterId))
                                         return "clusterId: string expected";
                                 if (message.cluster != null && message.hasOwnProperty("cluster")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.verify(message.cluster);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.verify(message.cluster, long + 1);
                                     if (error)
                                         return "cluster." + error;
                                 }
@@ -17271,9 +17923,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.CreateClusterRequest} CreateClusterRequest
                              */
-                            CreateClusterRequest.fromObject = function fromObject(object) {
+                            CreateClusterRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.CreateClusterRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.CreateClusterRequest();
                                 if (object.parent != null)
                                     message.parent = String(object.parent);
@@ -17282,7 +17938,7 @@
                                 if (object.cluster != null) {
                                     if (typeof object.cluster !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.CreateClusterRequest.cluster: object expected");
-                                    message.cluster = $root.google.cloud.redis.cluster.v1beta1.Cluster.fromObject(object.cluster);
+                                    message.cluster = $root.google.cloud.redis.cluster.v1beta1.Cluster.fromObject(object.cluster, long + 1);
                                 }
                                 if (object.requestId != null)
                                     message.requestId = String(object.requestId);
@@ -17370,7 +18026,7 @@
                             function ListClustersRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -17455,9 +18111,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListClustersRequest.decode = function decode(reader, length, error) {
+                            ListClustersRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ListClustersRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -17477,7 +18137,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -17508,9 +18168,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListClustersRequest.verify = function verify(message) {
+                            ListClustersRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.parent != null && message.hasOwnProperty("parent"))
                                     if (!$util.isString(message.parent))
                                         return "parent: string expected";
@@ -17531,9 +18195,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ListClustersRequest} ListClustersRequest
                              */
-                            ListClustersRequest.fromObject = function fromObject(object) {
+                            ListClustersRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ListClustersRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ListClustersRequest();
                                 if (object.parent != null)
                                     message.parent = String(object.parent);
@@ -17624,7 +18292,7 @@
                                 this.unreachable = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -17711,9 +18379,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListClustersResponse.decode = function decode(reader, length, error) {
+                            ListClustersResponse.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ListClustersResponse();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -17723,7 +18395,7 @@
                                     case 1: {
                                             if (!(message.clusters && message.clusters.length))
                                                 message.clusters = [];
-                                            message.clusters.push($root.google.cloud.redis.cluster.v1beta1.Cluster.decode(reader, reader.uint32()));
+                                            message.clusters.push($root.google.cloud.redis.cluster.v1beta1.Cluster.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
@@ -17737,7 +18409,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -17768,14 +18440,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListClustersResponse.verify = function verify(message) {
+                            ListClustersResponse.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.clusters != null && message.hasOwnProperty("clusters")) {
                                     if (!Array.isArray(message.clusters))
                                         return "clusters: array expected";
                                     for (var i = 0; i < message.clusters.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.verify(message.clusters[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.verify(message.clusters[i], long + 1);
                                         if (error)
                                             return "clusters." + error;
                                     }
@@ -17801,9 +18477,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ListClustersResponse} ListClustersResponse
                              */
-                            ListClustersResponse.fromObject = function fromObject(object) {
+                            ListClustersResponse.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ListClustersResponse)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ListClustersResponse();
                                 if (object.clusters) {
                                     if (!Array.isArray(object.clusters))
@@ -17812,7 +18492,7 @@
                                     for (var i = 0; i < object.clusters.length; ++i) {
                                         if (typeof object.clusters[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.ListClustersResponse.clusters: object expected");
-                                        message.clusters[i] = $root.google.cloud.redis.cluster.v1beta1.Cluster.fromObject(object.clusters[i]);
+                                        message.clusters[i] = $root.google.cloud.redis.cluster.v1beta1.Cluster.fromObject(object.clusters[i], long + 1);
                                     }
                                 }
                                 if (object.nextPageToken != null)
@@ -17912,7 +18592,7 @@
                             function UpdateClusterRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -17997,9 +18677,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            UpdateClusterRequest.decode = function decode(reader, length, error) {
+                            UpdateClusterRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.UpdateClusterRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -18007,11 +18691,11 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                            message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.cluster = $root.google.cloud.redis.cluster.v1beta1.Cluster.decode(reader, reader.uint32());
+                                            message.cluster = $root.google.cloud.redis.cluster.v1beta1.Cluster.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -18019,7 +18703,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -18050,16 +18734,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            UpdateClusterRequest.verify = function verify(message) {
+                            UpdateClusterRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                    var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                    var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                     if (error)
                                         return "updateMask." + error;
                                 }
                                 if (message.cluster != null && message.hasOwnProperty("cluster")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.verify(message.cluster);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.verify(message.cluster, long + 1);
                                     if (error)
                                         return "cluster." + error;
                                 }
@@ -18077,19 +18765,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.UpdateClusterRequest} UpdateClusterRequest
                              */
-                            UpdateClusterRequest.fromObject = function fromObject(object) {
+                            UpdateClusterRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.UpdateClusterRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.UpdateClusterRequest();
                                 if (object.updateMask != null) {
                                     if (typeof object.updateMask !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.UpdateClusterRequest.updateMask: object expected");
-                                    message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                    message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                                 }
                                 if (object.cluster != null) {
                                     if (typeof object.cluster !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.UpdateClusterRequest.cluster: object expected");
-                                    message.cluster = $root.google.cloud.redis.cluster.v1beta1.Cluster.fromObject(object.cluster);
+                                    message.cluster = $root.google.cloud.redis.cluster.v1beta1.Cluster.fromObject(object.cluster, long + 1);
                                 }
                                 if (object.requestId != null)
                                     message.requestId = String(object.requestId);
@@ -18172,7 +18864,7 @@
                             function GetClusterRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -18237,9 +18929,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GetClusterRequest.decode = function decode(reader, length, error) {
+                            GetClusterRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.GetClusterRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -18251,7 +18947,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -18282,9 +18978,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GetClusterRequest.verify = function verify(message) {
+                            GetClusterRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -18299,9 +18999,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.GetClusterRequest} GetClusterRequest
                              */
-                            GetClusterRequest.fromObject = function fromObject(object) {
+                            GetClusterRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.GetClusterRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.GetClusterRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -18378,7 +19082,7 @@
                             function DeleteClusterRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -18453,9 +19157,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DeleteClusterRequest.decode = function decode(reader, length, error) {
+                            DeleteClusterRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.DeleteClusterRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -18471,7 +19179,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -18502,9 +19210,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DeleteClusterRequest.verify = function verify(message) {
+                            DeleteClusterRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -18522,9 +19234,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.DeleteClusterRequest} DeleteClusterRequest
                              */
-                            DeleteClusterRequest.fromObject = function fromObject(object) {
+                            DeleteClusterRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.DeleteClusterRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.DeleteClusterRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -18606,7 +19322,7 @@
                             function GetClusterCertificateAuthorityRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -18671,9 +19387,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GetClusterCertificateAuthorityRequest.decode = function decode(reader, length, error) {
+                            GetClusterCertificateAuthorityRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.GetClusterCertificateAuthorityRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -18685,7 +19405,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -18716,9 +19436,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GetClusterCertificateAuthorityRequest.verify = function verify(message) {
+                            GetClusterCertificateAuthorityRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -18733,9 +19457,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.GetClusterCertificateAuthorityRequest} GetClusterCertificateAuthorityRequest
                              */
-                            GetClusterCertificateAuthorityRequest.fromObject = function fromObject(object) {
+                            GetClusterCertificateAuthorityRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.GetClusterCertificateAuthorityRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.GetClusterCertificateAuthorityRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -18813,7 +19541,7 @@
                             function ListBackupCollectionsRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -18898,9 +19626,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListBackupCollectionsRequest.decode = function decode(reader, length, error) {
+                            ListBackupCollectionsRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ListBackupCollectionsRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -18920,7 +19652,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -18951,9 +19683,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListBackupCollectionsRequest.verify = function verify(message) {
+                            ListBackupCollectionsRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.parent != null && message.hasOwnProperty("parent"))
                                     if (!$util.isString(message.parent))
                                         return "parent: string expected";
@@ -18974,9 +19710,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ListBackupCollectionsRequest} ListBackupCollectionsRequest
                              */
-                            ListBackupCollectionsRequest.fromObject = function fromObject(object) {
+                            ListBackupCollectionsRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ListBackupCollectionsRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ListBackupCollectionsRequest();
                                 if (object.parent != null)
                                     message.parent = String(object.parent);
@@ -19067,7 +19807,7 @@
                                 this.unreachable = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -19154,9 +19894,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListBackupCollectionsResponse.decode = function decode(reader, length, error) {
+                            ListBackupCollectionsResponse.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ListBackupCollectionsResponse();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -19166,7 +19910,7 @@
                                     case 1: {
                                             if (!(message.backupCollections && message.backupCollections.length))
                                                 message.backupCollections = [];
-                                            message.backupCollections.push($root.google.cloud.redis.cluster.v1beta1.BackupCollection.decode(reader, reader.uint32()));
+                                            message.backupCollections.push($root.google.cloud.redis.cluster.v1beta1.BackupCollection.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
@@ -19180,7 +19924,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -19211,14 +19955,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListBackupCollectionsResponse.verify = function verify(message) {
+                            ListBackupCollectionsResponse.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.backupCollections != null && message.hasOwnProperty("backupCollections")) {
                                     if (!Array.isArray(message.backupCollections))
                                         return "backupCollections: array expected";
                                     for (var i = 0; i < message.backupCollections.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.BackupCollection.verify(message.backupCollections[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.BackupCollection.verify(message.backupCollections[i], long + 1);
                                         if (error)
                                             return "backupCollections." + error;
                                     }
@@ -19244,9 +19992,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ListBackupCollectionsResponse} ListBackupCollectionsResponse
                              */
-                            ListBackupCollectionsResponse.fromObject = function fromObject(object) {
+                            ListBackupCollectionsResponse.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ListBackupCollectionsResponse)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ListBackupCollectionsResponse();
                                 if (object.backupCollections) {
                                     if (!Array.isArray(object.backupCollections))
@@ -19255,7 +20007,7 @@
                                     for (var i = 0; i < object.backupCollections.length; ++i) {
                                         if (typeof object.backupCollections[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.ListBackupCollectionsResponse.backupCollections: object expected");
-                                        message.backupCollections[i] = $root.google.cloud.redis.cluster.v1beta1.BackupCollection.fromObject(object.backupCollections[i]);
+                                        message.backupCollections[i] = $root.google.cloud.redis.cluster.v1beta1.BackupCollection.fromObject(object.backupCollections[i], long + 1);
                                     }
                                 }
                                 if (object.nextPageToken != null)
@@ -19353,7 +20105,7 @@
                             function GetBackupCollectionRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -19418,9 +20170,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GetBackupCollectionRequest.decode = function decode(reader, length, error) {
+                            GetBackupCollectionRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.GetBackupCollectionRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -19432,7 +20188,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -19463,9 +20219,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GetBackupCollectionRequest.verify = function verify(message) {
+                            GetBackupCollectionRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -19480,9 +20240,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.GetBackupCollectionRequest} GetBackupCollectionRequest
                              */
-                            GetBackupCollectionRequest.fromObject = function fromObject(object) {
+                            GetBackupCollectionRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.GetBackupCollectionRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.GetBackupCollectionRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -19560,7 +20324,7 @@
                             function ListBackupsRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -19645,9 +20409,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListBackupsRequest.decode = function decode(reader, length, error) {
+                            ListBackupsRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ListBackupsRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -19667,7 +20435,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -19698,9 +20466,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListBackupsRequest.verify = function verify(message) {
+                            ListBackupsRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.parent != null && message.hasOwnProperty("parent"))
                                     if (!$util.isString(message.parent))
                                         return "parent: string expected";
@@ -19721,9 +20493,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ListBackupsRequest} ListBackupsRequest
                              */
-                            ListBackupsRequest.fromObject = function fromObject(object) {
+                            ListBackupsRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ListBackupsRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ListBackupsRequest();
                                 if (object.parent != null)
                                     message.parent = String(object.parent);
@@ -19814,7 +20590,7 @@
                                 this.unreachable = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -19901,9 +20677,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ListBackupsResponse.decode = function decode(reader, length, error) {
+                            ListBackupsResponse.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ListBackupsResponse();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -19913,7 +20693,7 @@
                                     case 1: {
                                             if (!(message.backups && message.backups.length))
                                                 message.backups = [];
-                                            message.backups.push($root.google.cloud.redis.cluster.v1beta1.Backup.decode(reader, reader.uint32()));
+                                            message.backups.push($root.google.cloud.redis.cluster.v1beta1.Backup.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
@@ -19927,7 +20707,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -19958,14 +20738,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ListBackupsResponse.verify = function verify(message) {
+                            ListBackupsResponse.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.backups != null && message.hasOwnProperty("backups")) {
                                     if (!Array.isArray(message.backups))
                                         return "backups: array expected";
                                     for (var i = 0; i < message.backups.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.Backup.verify(message.backups[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.Backup.verify(message.backups[i], long + 1);
                                         if (error)
                                             return "backups." + error;
                                     }
@@ -19991,9 +20775,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ListBackupsResponse} ListBackupsResponse
                              */
-                            ListBackupsResponse.fromObject = function fromObject(object) {
+                            ListBackupsResponse.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ListBackupsResponse)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ListBackupsResponse();
                                 if (object.backups) {
                                     if (!Array.isArray(object.backups))
@@ -20002,7 +20790,7 @@
                                     for (var i = 0; i < object.backups.length; ++i) {
                                         if (typeof object.backups[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.ListBackupsResponse.backups: object expected");
-                                        message.backups[i] = $root.google.cloud.redis.cluster.v1beta1.Backup.fromObject(object.backups[i]);
+                                        message.backups[i] = $root.google.cloud.redis.cluster.v1beta1.Backup.fromObject(object.backups[i], long + 1);
                                     }
                                 }
                                 if (object.nextPageToken != null)
@@ -20100,7 +20888,7 @@
                             function GetBackupRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -20165,9 +20953,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GetBackupRequest.decode = function decode(reader, length, error) {
+                            GetBackupRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.GetBackupRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -20179,7 +20971,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -20210,9 +21002,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GetBackupRequest.verify = function verify(message) {
+                            GetBackupRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -20227,9 +21023,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.GetBackupRequest} GetBackupRequest
                              */
-                            GetBackupRequest.fromObject = function fromObject(object) {
+                            GetBackupRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.GetBackupRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.GetBackupRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -20306,7 +21106,7 @@
                             function DeleteBackupRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -20381,9 +21181,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DeleteBackupRequest.decode = function decode(reader, length, error) {
+                            DeleteBackupRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.DeleteBackupRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -20399,7 +21203,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -20430,9 +21234,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DeleteBackupRequest.verify = function verify(message) {
+                            DeleteBackupRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -20450,9 +21258,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.DeleteBackupRequest} DeleteBackupRequest
                              */
-                            DeleteBackupRequest.fromObject = function fromObject(object) {
+                            DeleteBackupRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.DeleteBackupRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.DeleteBackupRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -20535,7 +21347,7 @@
                             function ExportBackupRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -20624,9 +21436,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ExportBackupRequest.decode = function decode(reader, length, error) {
+                            ExportBackupRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ExportBackupRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -20642,7 +21458,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -20673,9 +21489,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ExportBackupRequest.verify = function verify(message) {
+                            ExportBackupRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.gcsBucket != null && message.hasOwnProperty("gcsBucket")) {
                                     properties.destination = 1;
@@ -20696,9 +21516,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ExportBackupRequest} ExportBackupRequest
                              */
-                            ExportBackupRequest.fromObject = function fromObject(object) {
+                            ExportBackupRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ExportBackupRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ExportBackupRequest();
                                 if (object.gcsBucket != null)
                                     message.gcsBucket = String(object.gcsBucket);
@@ -20783,7 +21607,7 @@
                             function BackupClusterRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -20877,9 +21701,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BackupClusterRequest.decode = function decode(reader, length, error) {
+                            BackupClusterRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.BackupClusterRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -20891,7 +21719,7 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.ttl = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                            message.ttl = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -20899,7 +21727,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -20930,15 +21758,19 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BackupClusterRequest.verify = function verify(message) {
+                            BackupClusterRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
                                 if (message.ttl != null && message.hasOwnProperty("ttl")) {
-                                    var error = $root.google.protobuf.Duration.verify(message.ttl);
+                                    var error = $root.google.protobuf.Duration.verify(message.ttl, long + 1);
                                     if (error)
                                         return "ttl." + error;
                                 }
@@ -20958,16 +21790,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.BackupClusterRequest} BackupClusterRequest
                              */
-                            BackupClusterRequest.fromObject = function fromObject(object) {
+                            BackupClusterRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.BackupClusterRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.BackupClusterRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
                                 if (object.ttl != null) {
                                     if (typeof object.ttl !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.BackupClusterRequest.ttl: object expected");
-                                    message.ttl = $root.google.protobuf.Duration.fromObject(object.ttl);
+                                    message.ttl = $root.google.protobuf.Duration.fromObject(object.ttl, long + 1);
                                 }
                                 if (object.backupId != null)
                                     message.backupId = String(object.backupId);
@@ -21090,7 +21926,7 @@
                                 this.clusterEndpoints = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -21567,9 +22403,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            Cluster.decode = function decode(reader, length, error) {
+                            Cluster.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.Cluster(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -21577,11 +22417,11 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 34: {
-                                            message.gcsSource = $root.google.cloud.redis.cluster.v1beta1.Cluster.GcsBackupSource.decode(reader, reader.uint32());
+                                            message.gcsSource = $root.google.cloud.redis.cluster.v1beta1.Cluster.GcsBackupSource.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 35: {
-                                            message.managedBackupSource = $root.google.cloud.redis.cluster.v1beta1.Cluster.ManagedBackupSource.decode(reader, reader.uint32());
+                                            message.managedBackupSource = $root.google.cloud.redis.cluster.v1beta1.Cluster.ManagedBackupSource.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 1: {
@@ -21589,7 +22429,7 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 4: {
@@ -21623,23 +22463,23 @@
                                     case 15: {
                                             if (!(message.pscConfigs && message.pscConfigs.length))
                                                 message.pscConfigs = [];
-                                            message.pscConfigs.push($root.google.cloud.redis.cluster.v1beta1.PscConfig.decode(reader, reader.uint32()));
+                                            message.pscConfigs.push($root.google.cloud.redis.cluster.v1beta1.PscConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 16: {
                                             if (!(message.discoveryEndpoints && message.discoveryEndpoints.length))
                                                 message.discoveryEndpoints = [];
-                                            message.discoveryEndpoints.push($root.google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint.decode(reader, reader.uint32()));
+                                            message.discoveryEndpoints.push($root.google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 17: {
                                             if (!(message.pscConnections && message.pscConnections.length))
                                                 message.pscConnections = [];
-                                            message.pscConnections.push($root.google.cloud.redis.cluster.v1beta1.PscConnection.decode(reader, reader.uint32()));
+                                            message.pscConnections.push($root.google.cloud.redis.cluster.v1beta1.PscConnection.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 18: {
-                                            message.stateInfo = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.decode(reader, reader.uint32());
+                                            message.stateInfo = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 19: {
@@ -21647,7 +22487,7 @@
                                             break;
                                         }
                                     case 20: {
-                                            message.persistenceConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.decode(reader, reader.uint32());
+                                            message.persistenceConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 21: {
@@ -21666,10 +22506,12 @@
                                                     value = reader.string();
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.redisConfigs, key);
                                             message.redisConfigs[key] = value;
                                             break;
                                         }
@@ -21678,11 +22520,11 @@
                                             break;
                                         }
                                     case 23: {
-                                            message.zoneDistributionConfig = $root.google.cloud.redis.cluster.v1beta1.ZoneDistributionConfig.decode(reader, reader.uint32());
+                                            message.zoneDistributionConfig = $root.google.cloud.redis.cluster.v1beta1.ZoneDistributionConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 24: {
-                                            message.crossClusterReplicationConfig = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.decode(reader, reader.uint32());
+                                            message.crossClusterReplicationConfig = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 25: {
@@ -21690,23 +22532,23 @@
                                             break;
                                         }
                                     case 26: {
-                                            message.maintenancePolicy = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy.decode(reader, reader.uint32());
+                                            message.maintenancePolicy = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 27: {
-                                            message.maintenanceSchedule = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule.decode(reader, reader.uint32());
+                                            message.maintenanceSchedule = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 30: {
                                             if (!(message.pscServiceAttachments && message.pscServiceAttachments.length))
                                                 message.pscServiceAttachments = [];
-                                            message.pscServiceAttachments.push($root.google.cloud.redis.cluster.v1beta1.PscServiceAttachment.decode(reader, reader.uint32()));
+                                            message.pscServiceAttachments.push($root.google.cloud.redis.cluster.v1beta1.PscServiceAttachment.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 36: {
                                             if (!(message.clusterEndpoints && message.clusterEndpoints.length))
                                                 message.clusterEndpoints = [];
-                                            message.clusterEndpoints.push($root.google.cloud.redis.cluster.v1beta1.ClusterEndpoint.decode(reader, reader.uint32()));
+                                            message.clusterEndpoints.push($root.google.cloud.redis.cluster.v1beta1.ClusterEndpoint.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 39: {
@@ -21718,11 +22560,11 @@
                                             break;
                                         }
                                     case 42: {
-                                            message.automatedBackupConfig = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.decode(reader, reader.uint32());
+                                            message.automatedBackupConfig = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 43: {
-                                            message.encryptionInfo = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.decode(reader, reader.uint32());
+                                            message.encryptionInfo = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 53: {
@@ -21738,7 +22580,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -21769,14 +22611,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            Cluster.verify = function verify(message) {
+                            Cluster.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.gcsSource != null && message.hasOwnProperty("gcsSource")) {
                                     properties.importSources = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.GcsBackupSource.verify(message.gcsSource);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.GcsBackupSource.verify(message.gcsSource, long + 1);
                                         if (error)
                                             return "gcsSource." + error;
                                     }
@@ -21786,7 +22632,7 @@
                                         return "importSources: multiple values";
                                     properties.importSources = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.ManagedBackupSource.verify(message.managedBackupSource);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.ManagedBackupSource.verify(message.managedBackupSource, long + 1);
                                         if (error)
                                             return "managedBackupSource." + error;
                                     }
@@ -21795,7 +22641,7 @@
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
                                 if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                     if (error)
                                         return "createTime." + error;
                                 }
@@ -21850,7 +22696,7 @@
                                     if (!Array.isArray(message.pscConfigs))
                                         return "pscConfigs: array expected";
                                     for (var i = 0; i < message.pscConfigs.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.PscConfig.verify(message.pscConfigs[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.PscConfig.verify(message.pscConfigs[i], long + 1);
                                         if (error)
                                             return "pscConfigs." + error;
                                     }
@@ -21859,7 +22705,7 @@
                                     if (!Array.isArray(message.discoveryEndpoints))
                                         return "discoveryEndpoints: array expected";
                                     for (var i = 0; i < message.discoveryEndpoints.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint.verify(message.discoveryEndpoints[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint.verify(message.discoveryEndpoints[i], long + 1);
                                         if (error)
                                             return "discoveryEndpoints." + error;
                                     }
@@ -21868,13 +22714,13 @@
                                     if (!Array.isArray(message.pscConnections))
                                         return "pscConnections: array expected";
                                     for (var i = 0; i < message.pscConnections.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.PscConnection.verify(message.pscConnections[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.PscConnection.verify(message.pscConnections[i], long + 1);
                                         if (error)
                                             return "pscConnections." + error;
                                     }
                                 }
                                 if (message.stateInfo != null && message.hasOwnProperty("stateInfo")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.verify(message.stateInfo);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.verify(message.stateInfo, long + 1);
                                     if (error)
                                         return "stateInfo." + error;
                                 }
@@ -21893,7 +22739,7 @@
                                         break;
                                     }
                                 if (message.persistenceConfig != null && message.hasOwnProperty("persistenceConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.verify(message.persistenceConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.verify(message.persistenceConfig, long + 1);
                                     if (error)
                                         return "persistenceConfig." + error;
                                 }
@@ -21911,12 +22757,12 @@
                                         return "preciseSizeGb: number expected";
                                 }
                                 if (message.zoneDistributionConfig != null && message.hasOwnProperty("zoneDistributionConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.ZoneDistributionConfig.verify(message.zoneDistributionConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.ZoneDistributionConfig.verify(message.zoneDistributionConfig, long + 1);
                                     if (error)
                                         return "zoneDistributionConfig." + error;
                                 }
                                 if (message.crossClusterReplicationConfig != null && message.hasOwnProperty("crossClusterReplicationConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.verify(message.crossClusterReplicationConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.verify(message.crossClusterReplicationConfig, long + 1);
                                     if (error)
                                         return "crossClusterReplicationConfig." + error;
                                 }
@@ -21928,7 +22774,7 @@
                                 if (message.maintenancePolicy != null && message.hasOwnProperty("maintenancePolicy")) {
                                     properties._maintenancePolicy = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy.verify(message.maintenancePolicy);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy.verify(message.maintenancePolicy, long + 1);
                                         if (error)
                                             return "maintenancePolicy." + error;
                                     }
@@ -21936,7 +22782,7 @@
                                 if (message.maintenanceSchedule != null && message.hasOwnProperty("maintenanceSchedule")) {
                                     properties._maintenanceSchedule = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule.verify(message.maintenanceSchedule);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule.verify(message.maintenanceSchedule, long + 1);
                                         if (error)
                                             return "maintenanceSchedule." + error;
                                     }
@@ -21945,7 +22791,7 @@
                                     if (!Array.isArray(message.pscServiceAttachments))
                                         return "pscServiceAttachments: array expected";
                                     for (var i = 0; i < message.pscServiceAttachments.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.PscServiceAttachment.verify(message.pscServiceAttachments[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.PscServiceAttachment.verify(message.pscServiceAttachments[i], long + 1);
                                         if (error)
                                             return "pscServiceAttachments." + error;
                                     }
@@ -21954,7 +22800,7 @@
                                     if (!Array.isArray(message.clusterEndpoints))
                                         return "clusterEndpoints: array expected";
                                     for (var i = 0; i < message.clusterEndpoints.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.ClusterEndpoint.verify(message.clusterEndpoints[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.ClusterEndpoint.verify(message.clusterEndpoints[i], long + 1);
                                         if (error)
                                             return "clusterEndpoints." + error;
                                     }
@@ -21970,12 +22816,12 @@
                                         return "kmsKey: string expected";
                                 }
                                 if (message.automatedBackupConfig != null && message.hasOwnProperty("automatedBackupConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.verify(message.automatedBackupConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.verify(message.automatedBackupConfig, long + 1);
                                     if (error)
                                         return "automatedBackupConfig." + error;
                                 }
                                 if (message.encryptionInfo != null && message.hasOwnProperty("encryptionInfo")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.verify(message.encryptionInfo);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.verify(message.encryptionInfo, long + 1);
                                     if (error)
                                         return "encryptionInfo." + error;
                                 }
@@ -22012,26 +22858,30 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.Cluster} Cluster
                              */
-                            Cluster.fromObject = function fromObject(object) {
+                            Cluster.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.Cluster)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.Cluster();
                                 if (object.gcsSource != null) {
                                     if (typeof object.gcsSource !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.gcsSource: object expected");
-                                    message.gcsSource = $root.google.cloud.redis.cluster.v1beta1.Cluster.GcsBackupSource.fromObject(object.gcsSource);
+                                    message.gcsSource = $root.google.cloud.redis.cluster.v1beta1.Cluster.GcsBackupSource.fromObject(object.gcsSource, long + 1);
                                 }
                                 if (object.managedBackupSource != null) {
                                     if (typeof object.managedBackupSource !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.managedBackupSource: object expected");
-                                    message.managedBackupSource = $root.google.cloud.redis.cluster.v1beta1.Cluster.ManagedBackupSource.fromObject(object.managedBackupSource);
+                                    message.managedBackupSource = $root.google.cloud.redis.cluster.v1beta1.Cluster.ManagedBackupSource.fromObject(object.managedBackupSource, long + 1);
                                 }
                                 if (object.name != null)
                                     message.name = String(object.name);
                                 if (object.createTime != null) {
                                     if (typeof object.createTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.createTime: object expected");
-                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                                 }
                                 switch (object.state) {
                                 default:
@@ -22116,7 +22966,7 @@
                                     for (var i = 0; i < object.pscConfigs.length; ++i) {
                                         if (typeof object.pscConfigs[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.pscConfigs: object expected");
-                                        message.pscConfigs[i] = $root.google.cloud.redis.cluster.v1beta1.PscConfig.fromObject(object.pscConfigs[i]);
+                                        message.pscConfigs[i] = $root.google.cloud.redis.cluster.v1beta1.PscConfig.fromObject(object.pscConfigs[i], long + 1);
                                     }
                                 }
                                 if (object.discoveryEndpoints) {
@@ -22126,7 +22976,7 @@
                                     for (var i = 0; i < object.discoveryEndpoints.length; ++i) {
                                         if (typeof object.discoveryEndpoints[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.discoveryEndpoints: object expected");
-                                        message.discoveryEndpoints[i] = $root.google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint.fromObject(object.discoveryEndpoints[i]);
+                                        message.discoveryEndpoints[i] = $root.google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint.fromObject(object.discoveryEndpoints[i], long + 1);
                                     }
                                 }
                                 if (object.pscConnections) {
@@ -22136,13 +22986,13 @@
                                     for (var i = 0; i < object.pscConnections.length; ++i) {
                                         if (typeof object.pscConnections[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.pscConnections: object expected");
-                                        message.pscConnections[i] = $root.google.cloud.redis.cluster.v1beta1.PscConnection.fromObject(object.pscConnections[i]);
+                                        message.pscConnections[i] = $root.google.cloud.redis.cluster.v1beta1.PscConnection.fromObject(object.pscConnections[i], long + 1);
                                     }
                                 }
                                 if (object.stateInfo != null) {
                                     if (typeof object.stateInfo !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.stateInfo: object expected");
-                                    message.stateInfo = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.fromObject(object.stateInfo);
+                                    message.stateInfo = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.fromObject(object.stateInfo, long + 1);
                                 }
                                 switch (object.nodeType) {
                                 default:
@@ -22187,38 +23037,41 @@
                                 if (object.persistenceConfig != null) {
                                     if (typeof object.persistenceConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.persistenceConfig: object expected");
-                                    message.persistenceConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.fromObject(object.persistenceConfig);
+                                    message.persistenceConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.fromObject(object.persistenceConfig, long + 1);
                                 }
                                 if (object.redisConfigs) {
                                     if (typeof object.redisConfigs !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.redisConfigs: object expected");
                                     message.redisConfigs = {};
-                                    for (var keys = Object.keys(object.redisConfigs), i = 0; i < keys.length; ++i)
+                                    for (var keys = Object.keys(object.redisConfigs), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.redisConfigs, keys[i]);
                                         message.redisConfigs[keys[i]] = String(object.redisConfigs[keys[i]]);
+                                    }
                                 }
                                 if (object.preciseSizeGb != null)
                                     message.preciseSizeGb = Number(object.preciseSizeGb);
                                 if (object.zoneDistributionConfig != null) {
                                     if (typeof object.zoneDistributionConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.zoneDistributionConfig: object expected");
-                                    message.zoneDistributionConfig = $root.google.cloud.redis.cluster.v1beta1.ZoneDistributionConfig.fromObject(object.zoneDistributionConfig);
+                                    message.zoneDistributionConfig = $root.google.cloud.redis.cluster.v1beta1.ZoneDistributionConfig.fromObject(object.zoneDistributionConfig, long + 1);
                                 }
                                 if (object.crossClusterReplicationConfig != null) {
                                     if (typeof object.crossClusterReplicationConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.crossClusterReplicationConfig: object expected");
-                                    message.crossClusterReplicationConfig = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.fromObject(object.crossClusterReplicationConfig);
+                                    message.crossClusterReplicationConfig = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.fromObject(object.crossClusterReplicationConfig, long + 1);
                                 }
                                 if (object.deletionProtectionEnabled != null)
                                     message.deletionProtectionEnabled = Boolean(object.deletionProtectionEnabled);
                                 if (object.maintenancePolicy != null) {
                                     if (typeof object.maintenancePolicy !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.maintenancePolicy: object expected");
-                                    message.maintenancePolicy = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy.fromObject(object.maintenancePolicy);
+                                    message.maintenancePolicy = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy.fromObject(object.maintenancePolicy, long + 1);
                                 }
                                 if (object.maintenanceSchedule != null) {
                                     if (typeof object.maintenanceSchedule !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.maintenanceSchedule: object expected");
-                                    message.maintenanceSchedule = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule.fromObject(object.maintenanceSchedule);
+                                    message.maintenanceSchedule = $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule.fromObject(object.maintenanceSchedule, long + 1);
                                 }
                                 if (object.pscServiceAttachments) {
                                     if (!Array.isArray(object.pscServiceAttachments))
@@ -22227,7 +23080,7 @@
                                     for (var i = 0; i < object.pscServiceAttachments.length; ++i) {
                                         if (typeof object.pscServiceAttachments[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.pscServiceAttachments: object expected");
-                                        message.pscServiceAttachments[i] = $root.google.cloud.redis.cluster.v1beta1.PscServiceAttachment.fromObject(object.pscServiceAttachments[i]);
+                                        message.pscServiceAttachments[i] = $root.google.cloud.redis.cluster.v1beta1.PscServiceAttachment.fromObject(object.pscServiceAttachments[i], long + 1);
                                     }
                                 }
                                 if (object.clusterEndpoints) {
@@ -22237,7 +23090,7 @@
                                     for (var i = 0; i < object.clusterEndpoints.length; ++i) {
                                         if (typeof object.clusterEndpoints[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.clusterEndpoints: object expected");
-                                        message.clusterEndpoints[i] = $root.google.cloud.redis.cluster.v1beta1.ClusterEndpoint.fromObject(object.clusterEndpoints[i]);
+                                        message.clusterEndpoints[i] = $root.google.cloud.redis.cluster.v1beta1.ClusterEndpoint.fromObject(object.clusterEndpoints[i], long + 1);
                                     }
                                 }
                                 if (object.backupCollection != null)
@@ -22247,12 +23100,12 @@
                                 if (object.automatedBackupConfig != null) {
                                     if (typeof object.automatedBackupConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.automatedBackupConfig: object expected");
-                                    message.automatedBackupConfig = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.fromObject(object.automatedBackupConfig);
+                                    message.automatedBackupConfig = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.fromObject(object.automatedBackupConfig, long + 1);
                                 }
                                 if (object.encryptionInfo != null) {
                                     if (typeof object.encryptionInfo !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.encryptionInfo: object expected");
-                                    message.encryptionInfo = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.fromObject(object.encryptionInfo);
+                                    message.encryptionInfo = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.fromObject(object.encryptionInfo, long + 1);
                                 }
                                 switch (object.serverCaMode) {
                                 default:
@@ -22373,8 +23226,11 @@
                                 var keys2;
                                 if (message.redisConfigs && (keys2 = Object.keys(message.redisConfigs)).length) {
                                     object.redisConfigs = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.redisConfigs, keys2[j]);
                                         object.redisConfigs[keys2[j]] = message.redisConfigs[keys2[j]];
+                                    }
                                 }
                                 if (message.preciseSizeGb != null && message.hasOwnProperty("preciseSizeGb")) {
                                     object.preciseSizeGb = options.json && !isFinite(message.preciseSizeGb) ? String(message.preciseSizeGb) : message.preciseSizeGb;
@@ -22498,7 +23354,7 @@
                                 function StateInfo(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -22577,9 +23433,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                StateInfo.decode = function decode(reader, length, error) {
+                                StateInfo.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -22587,11 +23447,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.updateInfo = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.UpdateInfo.decode(reader, reader.uint32());
+                                                message.updateInfo = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.UpdateInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -22622,14 +23482,18 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                StateInfo.verify = function verify(message) {
+                                StateInfo.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.updateInfo != null && message.hasOwnProperty("updateInfo")) {
                                         properties.info = 1;
                                         {
-                                            var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.UpdateInfo.verify(message.updateInfo);
+                                            var error = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.UpdateInfo.verify(message.updateInfo, long + 1);
                                             if (error)
                                                 return "updateInfo." + error;
                                         }
@@ -22645,14 +23509,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1beta1.Cluster.StateInfo} StateInfo
                                  */
-                                StateInfo.fromObject = function fromObject(object) {
+                                StateInfo.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo();
                                     if (object.updateInfo != null) {
                                         if (typeof object.updateInfo !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.updateInfo: object expected");
-                                        message.updateInfo = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.UpdateInfo.fromObject(object.updateInfo);
+                                        message.updateInfo = $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.UpdateInfo.fromObject(object.updateInfo, long + 1);
                                     }
                                     return message;
                                 };
@@ -22725,7 +23593,7 @@
                                     function UpdateInfo(properties) {
                                         if (properties)
                                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                                if (properties[keys[i]] != null)
+                                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                     this[keys[i]] = properties[keys[i]];
                                     }
     
@@ -22815,9 +23683,13 @@
                                      * @throws {Error} If the payload is not a reader or valid buffer
                                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                      */
-                                    UpdateInfo.decode = function decode(reader, length, error) {
+                                    UpdateInfo.decode = function decode(reader, length, error, long) {
                                         if (!(reader instanceof $Reader))
                                             reader = $Reader.create(reader);
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $Reader.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.UpdateInfo();
                                         while (reader.pos < end) {
                                             var tag = reader.uint32();
@@ -22833,7 +23705,7 @@
                                                     break;
                                                 }
                                             default:
-                                                reader.skipType(tag & 7);
+                                                reader.skipType(tag & 7, long);
                                                 break;
                                             }
                                         }
@@ -22864,9 +23736,13 @@
                                      * @param {Object.<string,*>} message Plain object to verify
                                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                      */
-                                    UpdateInfo.verify = function verify(message) {
+                                    UpdateInfo.verify = function verify(message, long) {
                                         if (typeof message !== "object" || message === null)
                                             return "object expected";
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            return "maximum nesting depth exceeded";
                                         var properties = {};
                                         if (message.targetShardCount != null && message.hasOwnProperty("targetShardCount")) {
                                             properties._targetShardCount = 1;
@@ -22889,9 +23765,13 @@
                                      * @param {Object.<string,*>} object Plain object
                                      * @returns {google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.UpdateInfo} UpdateInfo
                                      */
-                                    UpdateInfo.fromObject = function fromObject(object) {
+                                    UpdateInfo.fromObject = function fromObject(object, long) {
                                         if (object instanceof $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.UpdateInfo)
                                             return object;
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var message = new $root.google.cloud.redis.cluster.v1beta1.Cluster.StateInfo.UpdateInfo();
                                         if (object.targetShardCount != null)
                                             message.targetShardCount = object.targetShardCount | 0;
@@ -22979,7 +23859,7 @@
                                     this.uris = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -23045,9 +23925,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                GcsBackupSource.decode = function decode(reader, length, error) {
+                                GcsBackupSource.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.Cluster.GcsBackupSource();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -23061,7 +23945,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -23092,9 +23976,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                GcsBackupSource.verify = function verify(message) {
+                                GcsBackupSource.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.uris != null && message.hasOwnProperty("uris")) {
                                         if (!Array.isArray(message.uris))
                                             return "uris: array expected";
@@ -23113,9 +24001,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1beta1.Cluster.GcsBackupSource} GcsBackupSource
                                  */
-                                GcsBackupSource.fromObject = function fromObject(object) {
+                                GcsBackupSource.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1beta1.Cluster.GcsBackupSource)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1beta1.Cluster.GcsBackupSource();
                                     if (object.uris) {
                                         if (!Array.isArray(object.uris))
@@ -23199,7 +24091,7 @@
                                 function ManagedBackupSource(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -23264,9 +24156,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                ManagedBackupSource.decode = function decode(reader, length, error) {
+                                ManagedBackupSource.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.Cluster.ManagedBackupSource();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -23278,7 +24174,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -23309,9 +24205,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                ManagedBackupSource.verify = function verify(message) {
+                                ManagedBackupSource.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.backup != null && message.hasOwnProperty("backup"))
                                         if (!$util.isString(message.backup))
                                             return "backup: string expected";
@@ -23326,9 +24226,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1beta1.Cluster.ManagedBackupSource} ManagedBackupSource
                                  */
-                                ManagedBackupSource.fromObject = function fromObject(object) {
+                                ManagedBackupSource.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1beta1.Cluster.ManagedBackupSource)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1beta1.Cluster.ManagedBackupSource();
                                     if (object.backup != null)
                                         message.backup = String(object.backup);
@@ -23429,7 +24333,7 @@
                             function AutomatedBackupConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -23534,9 +24438,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            AutomatedBackupConfig.decode = function decode(reader, length, error) {
+                            AutomatedBackupConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -23544,7 +24452,7 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 2: {
-                                            message.fixedFrequencySchedule = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule.decode(reader, reader.uint32());
+                                            message.fixedFrequencySchedule = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 1: {
@@ -23552,11 +24460,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.retention = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                            message.retention = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -23587,14 +24495,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            AutomatedBackupConfig.verify = function verify(message) {
+                            AutomatedBackupConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.fixedFrequencySchedule != null && message.hasOwnProperty("fixedFrequencySchedule")) {
                                     properties.schedule = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule.verify(message.fixedFrequencySchedule);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule.verify(message.fixedFrequencySchedule, long + 1);
                                         if (error)
                                             return "fixedFrequencySchedule." + error;
                                     }
@@ -23611,7 +24523,7 @@
                                 if (message.retention != null && message.hasOwnProperty("retention")) {
                                     properties._retention = 1;
                                     {
-                                        var error = $root.google.protobuf.Duration.verify(message.retention);
+                                        var error = $root.google.protobuf.Duration.verify(message.retention, long + 1);
                                         if (error)
                                             return "retention." + error;
                                     }
@@ -23627,14 +24539,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig} AutomatedBackupConfig
                              */
-                            AutomatedBackupConfig.fromObject = function fromObject(object) {
+                            AutomatedBackupConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig();
                                 if (object.fixedFrequencySchedule != null) {
                                     if (typeof object.fixedFrequencySchedule !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.fixedFrequencySchedule: object expected");
-                                    message.fixedFrequencySchedule = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule.fromObject(object.fixedFrequencySchedule);
+                                    message.fixedFrequencySchedule = $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule.fromObject(object.fixedFrequencySchedule, long + 1);
                                 }
                                 switch (object.automatedBackupMode) {
                                 default:
@@ -23659,7 +24575,7 @@
                                 if (object.retention != null) {
                                     if (typeof object.retention !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.retention: object expected");
-                                    message.retention = $root.google.protobuf.Duration.fromObject(object.retention);
+                                    message.retention = $root.google.protobuf.Duration.fromObject(object.retention, long + 1);
                                 }
                                 return message;
                             };
@@ -23740,7 +24656,7 @@
                                 function FixedFrequencySchedule(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -23814,9 +24730,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FixedFrequencySchedule.decode = function decode(reader, length, error) {
+                                FixedFrequencySchedule.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -23824,11 +24744,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 2: {
-                                                message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32());
+                                                message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -23859,14 +24779,18 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FixedFrequencySchedule.verify = function verify(message) {
+                                FixedFrequencySchedule.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.startTime != null && message.hasOwnProperty("startTime")) {
                                         properties._startTime = 1;
                                         {
-                                            var error = $root.google.type.TimeOfDay.verify(message.startTime);
+                                            var error = $root.google.type.TimeOfDay.verify(message.startTime, long + 1);
                                             if (error)
                                                 return "startTime." + error;
                                         }
@@ -23882,14 +24806,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule} FixedFrequencySchedule
                                  */
-                                FixedFrequencySchedule.fromObject = function fromObject(object) {
+                                FixedFrequencySchedule.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule();
                                     if (object.startTime != null) {
                                         if (typeof object.startTime !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.AutomatedBackupConfig.FixedFrequencySchedule.startTime: object expected");
-                                        message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime);
+                                        message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime, long + 1);
                                     }
                                     return message;
                                 };
@@ -23987,7 +24915,7 @@
                             function BackupCollection(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -24092,9 +25020,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BackupCollection.decode = function decode(reader, length, error) {
+                            BackupCollection.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.BackupCollection();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -24122,7 +25054,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -24153,9 +25085,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BackupCollection.verify = function verify(message) {
+                            BackupCollection.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -24182,9 +25118,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.BackupCollection} BackupCollection
                              */
-                            BackupCollection.fromObject = function fromObject(object) {
+                            BackupCollection.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.BackupCollection)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.BackupCollection();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -24296,7 +25236,7 @@
                                 this.backupFiles = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -24502,9 +25442,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            Backup.decode = function decode(reader, length, error) {
+                            Backup.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.Backup();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -24516,7 +25460,7 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -24532,7 +25476,7 @@
                                             break;
                                         }
                                     case 6: {
-                                            message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 7: {
@@ -24542,7 +25486,7 @@
                                     case 8: {
                                             if (!(message.backupFiles && message.backupFiles.length))
                                                 message.backupFiles = [];
-                                            message.backupFiles.push($root.google.cloud.redis.cluster.v1beta1.BackupFile.decode(reader, reader.uint32()));
+                                            message.backupFiles.push($root.google.cloud.redis.cluster.v1beta1.BackupFile.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 9: {
@@ -24566,7 +25510,7 @@
                                             break;
                                         }
                                     case 14: {
-                                            message.encryptionInfo = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.decode(reader, reader.uint32());
+                                            message.encryptionInfo = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 15: {
@@ -24574,7 +25518,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -24605,14 +25549,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            Backup.verify = function verify(message) {
+                            Backup.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
                                 if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                     if (error)
                                         return "createTime." + error;
                                 }
@@ -24626,7 +25574,7 @@
                                     if (!$util.isInteger(message.totalSizeBytes) && !(message.totalSizeBytes && $util.isInteger(message.totalSizeBytes.low) && $util.isInteger(message.totalSizeBytes.high)))
                                         return "totalSizeBytes: integer|Long expected";
                                 if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                     if (error)
                                         return "expireTime." + error;
                                 }
@@ -24637,7 +25585,7 @@
                                     if (!Array.isArray(message.backupFiles))
                                         return "backupFiles: array expected";
                                     for (var i = 0; i < message.backupFiles.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.BackupFile.verify(message.backupFiles[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.BackupFile.verify(message.backupFiles[i], long + 1);
                                         if (error)
                                             return "backupFiles." + error;
                                     }
@@ -24683,7 +25631,7 @@
                                         break;
                                     }
                                 if (message.encryptionInfo != null && message.hasOwnProperty("encryptionInfo")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.verify(message.encryptionInfo);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.verify(message.encryptionInfo, long + 1);
                                     if (error)
                                         return "encryptionInfo." + error;
                                 }
@@ -24701,16 +25649,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.Backup} Backup
                              */
-                            Backup.fromObject = function fromObject(object) {
+                            Backup.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.Backup)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.Backup();
                                 if (object.name != null)
                                     message.name = String(object.name);
                                 if (object.createTime != null) {
                                     if (typeof object.createTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Backup.createTime: object expected");
-                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                                 }
                                 if (object.cluster != null)
                                     message.cluster = String(object.cluster);
@@ -24728,7 +25680,7 @@
                                 if (object.expireTime != null) {
                                     if (typeof object.expireTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Backup.expireTime: object expected");
-                                    message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                    message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                                 }
                                 if (object.engineVersion != null)
                                     message.engineVersion = String(object.engineVersion);
@@ -24739,7 +25691,7 @@
                                     for (var i = 0; i < object.backupFiles.length; ++i) {
                                         if (typeof object.backupFiles[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.Backup.backupFiles: object expected");
-                                        message.backupFiles[i] = $root.google.cloud.redis.cluster.v1beta1.BackupFile.fromObject(object.backupFiles[i]);
+                                        message.backupFiles[i] = $root.google.cloud.redis.cluster.v1beta1.BackupFile.fromObject(object.backupFiles[i], long + 1);
                                     }
                                 }
                                 switch (object.nodeType) {
@@ -24837,7 +25789,7 @@
                                 if (object.encryptionInfo != null) {
                                     if (typeof object.encryptionInfo !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.Backup.encryptionInfo: object expected");
-                                    message.encryptionInfo = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.fromObject(object.encryptionInfo);
+                                    message.encryptionInfo = $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo.fromObject(object.encryptionInfo, long + 1);
                                 }
                                 if (object.uid != null)
                                     message.uid = String(object.uid);
@@ -25005,7 +25957,7 @@
                             function BackupFile(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -25090,9 +26042,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BackupFile.decode = function decode(reader, length, error) {
+                            BackupFile.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.BackupFile();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -25108,11 +26064,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -25143,9 +26099,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BackupFile.verify = function verify(message) {
+                            BackupFile.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.fileName != null && message.hasOwnProperty("fileName"))
                                     if (!$util.isString(message.fileName))
                                         return "fileName: string expected";
@@ -25153,7 +26113,7 @@
                                     if (!$util.isInteger(message.sizeBytes) && !(message.sizeBytes && $util.isInteger(message.sizeBytes.low) && $util.isInteger(message.sizeBytes.high)))
                                         return "sizeBytes: integer|Long expected";
                                 if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                     if (error)
                                         return "createTime." + error;
                                 }
@@ -25168,9 +26128,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.BackupFile} BackupFile
                              */
-                            BackupFile.fromObject = function fromObject(object) {
+                            BackupFile.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.BackupFile)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.BackupFile();
                                 if (object.fileName != null)
                                     message.fileName = String(object.fileName);
@@ -25186,7 +26150,7 @@
                                 if (object.createTime != null) {
                                     if (typeof object.createTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.BackupFile.createTime: object expected");
-                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                                 }
                                 return message;
                             };
@@ -25275,7 +26239,7 @@
                             function PscServiceAttachment(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -25350,9 +26314,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PscServiceAttachment.decode = function decode(reader, length, error) {
+                            PscServiceAttachment.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.PscServiceAttachment();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -25368,7 +26336,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -25399,9 +26367,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PscServiceAttachment.verify = function verify(message) {
+                            PscServiceAttachment.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.serviceAttachment != null && message.hasOwnProperty("serviceAttachment"))
                                     if (!$util.isString(message.serviceAttachment))
                                         return "serviceAttachment: string expected";
@@ -25426,9 +26398,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.PscServiceAttachment} PscServiceAttachment
                              */
-                            PscServiceAttachment.fromObject = function fromObject(object) {
+                            PscServiceAttachment.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.PscServiceAttachment)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.PscServiceAttachment();
                                 if (object.serviceAttachment != null)
                                     message.serviceAttachment = String(object.serviceAttachment);
@@ -25537,7 +26513,7 @@
                                 this.secondaryClusters = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -25643,9 +26619,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            CrossClusterReplicationConfig.decode = function decode(reader, length, error) {
+                            CrossClusterReplicationConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -25657,25 +26637,25 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.primaryCluster = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32());
+                                            message.primaryCluster = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
                                             if (!(message.secondaryClusters && message.secondaryClusters.length))
                                                 message.secondaryClusters = [];
-                                            message.secondaryClusters.push($root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32()));
+                                            message.secondaryClusters.push($root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 4: {
-                                            message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 5: {
-                                            message.membership = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership.decode(reader, reader.uint32());
+                                            message.membership = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -25706,9 +26686,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            CrossClusterReplicationConfig.verify = function verify(message) {
+                            CrossClusterReplicationConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.clusterRole != null && message.hasOwnProperty("clusterRole"))
                                     switch (message.clusterRole) {
                                     default:
@@ -25720,7 +26704,7 @@
                                         break;
                                     }
                                 if (message.primaryCluster != null && message.hasOwnProperty("primaryCluster")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.verify(message.primaryCluster);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.verify(message.primaryCluster, long + 1);
                                     if (error)
                                         return "primaryCluster." + error;
                                 }
@@ -25728,18 +26712,18 @@
                                     if (!Array.isArray(message.secondaryClusters))
                                         return "secondaryClusters: array expected";
                                     for (var i = 0; i < message.secondaryClusters.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.verify(message.secondaryClusters[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.verify(message.secondaryClusters[i], long + 1);
                                         if (error)
                                             return "secondaryClusters." + error;
                                     }
                                 }
                                 if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                     if (error)
                                         return "updateTime." + error;
                                 }
                                 if (message.membership != null && message.hasOwnProperty("membership")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership.verify(message.membership);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership.verify(message.membership, long + 1);
                                     if (error)
                                         return "membership." + error;
                                 }
@@ -25754,9 +26738,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig} CrossClusterReplicationConfig
                              */
-                            CrossClusterReplicationConfig.fromObject = function fromObject(object) {
+                            CrossClusterReplicationConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig();
                                 switch (object.clusterRole) {
                                 default:
@@ -25785,7 +26773,7 @@
                                 if (object.primaryCluster != null) {
                                     if (typeof object.primaryCluster !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.primaryCluster: object expected");
-                                    message.primaryCluster = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.primaryCluster);
+                                    message.primaryCluster = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.primaryCluster, long + 1);
                                 }
                                 if (object.secondaryClusters) {
                                     if (!Array.isArray(object.secondaryClusters))
@@ -25794,18 +26782,18 @@
                                     for (var i = 0; i < object.secondaryClusters.length; ++i) {
                                         if (typeof object.secondaryClusters[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.secondaryClusters: object expected");
-                                        message.secondaryClusters[i] = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.secondaryClusters[i]);
+                                        message.secondaryClusters[i] = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.secondaryClusters[i], long + 1);
                                     }
                                 }
                                 if (object.updateTime != null) {
                                     if (typeof object.updateTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.updateTime: object expected");
-                                    message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                    message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                                 }
                                 if (object.membership != null) {
                                     if (typeof object.membership !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.membership: object expected");
-                                    message.membership = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership.fromObject(object.membership);
+                                    message.membership = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership.fromObject(object.membership, long + 1);
                                 }
                                 return message;
                             };
@@ -25894,7 +26882,7 @@
                                 function RemoteCluster(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -25969,9 +26957,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                RemoteCluster.decode = function decode(reader, length, error) {
+                                RemoteCluster.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -25987,7 +26979,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -26018,9 +27010,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                RemoteCluster.verify = function verify(message) {
+                                RemoteCluster.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.cluster != null && message.hasOwnProperty("cluster"))
                                         if (!$util.isString(message.cluster))
                                             return "cluster: string expected";
@@ -26038,9 +27034,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster} RemoteCluster
                                  */
-                                RemoteCluster.fromObject = function fromObject(object) {
+                                RemoteCluster.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster();
                                     if (object.cluster != null)
                                         message.cluster = String(object.cluster);
@@ -26124,7 +27124,7 @@
                                     this.secondaryClusters = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -26200,9 +27200,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                Membership.decode = function decode(reader, length, error) {
+                                Membership.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -26210,17 +27214,17 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.primaryCluster = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32());
+                                                message.primaryCluster = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         case 2: {
                                                 if (!(message.secondaryClusters && message.secondaryClusters.length))
                                                     message.secondaryClusters = [];
-                                                message.secondaryClusters.push($root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32()));
+                                                message.secondaryClusters.push($root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -26251,11 +27255,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                Membership.verify = function verify(message) {
+                                Membership.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.primaryCluster != null && message.hasOwnProperty("primaryCluster")) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.verify(message.primaryCluster);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.verify(message.primaryCluster, long + 1);
                                         if (error)
                                             return "primaryCluster." + error;
                                     }
@@ -26263,7 +27271,7 @@
                                         if (!Array.isArray(message.secondaryClusters))
                                             return "secondaryClusters: array expected";
                                         for (var i = 0; i < message.secondaryClusters.length; ++i) {
-                                            var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.verify(message.secondaryClusters[i]);
+                                            var error = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.verify(message.secondaryClusters[i], long + 1);
                                             if (error)
                                                 return "secondaryClusters." + error;
                                         }
@@ -26279,14 +27287,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership} Membership
                                  */
-                                Membership.fromObject = function fromObject(object) {
+                                Membership.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership();
                                     if (object.primaryCluster != null) {
                                         if (typeof object.primaryCluster !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership.primaryCluster: object expected");
-                                        message.primaryCluster = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.primaryCluster);
+                                        message.primaryCluster = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.primaryCluster, long + 1);
                                     }
                                     if (object.secondaryClusters) {
                                         if (!Array.isArray(object.secondaryClusters))
@@ -26295,7 +27307,7 @@
                                         for (var i = 0; i < object.secondaryClusters.length; ++i) {
                                             if (typeof object.secondaryClusters[i] !== "object")
                                                 throw TypeError(".google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.Membership.secondaryClusters: object expected");
-                                            message.secondaryClusters[i] = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.secondaryClusters[i]);
+                                            message.secondaryClusters[i] = $root.google.cloud.redis.cluster.v1beta1.CrossClusterReplicationConfig.RemoteCluster.fromObject(object.secondaryClusters[i], long + 1);
                                         }
                                     }
                                     return message;
@@ -26401,7 +27413,7 @@
                                 this.weeklyMaintenanceWindow = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -26487,9 +27499,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ClusterMaintenancePolicy.decode = function decode(reader, length, error) {
+                            ClusterMaintenancePolicy.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -26497,21 +27513,21 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
                                             if (!(message.weeklyMaintenanceWindow && message.weeklyMaintenanceWindow.length))
                                                 message.weeklyMaintenanceWindow = [];
-                                            message.weeklyMaintenanceWindow.push($root.google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow.decode(reader, reader.uint32()));
+                                            message.weeklyMaintenanceWindow.push($root.google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -26542,16 +27558,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ClusterMaintenancePolicy.verify = function verify(message) {
+                            ClusterMaintenancePolicy.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                     if (error)
                                         return "createTime." + error;
                                 }
                                 if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                     if (error)
                                         return "updateTime." + error;
                                 }
@@ -26559,7 +27579,7 @@
                                     if (!Array.isArray(message.weeklyMaintenanceWindow))
                                         return "weeklyMaintenanceWindow: array expected";
                                     for (var i = 0; i < message.weeklyMaintenanceWindow.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow.verify(message.weeklyMaintenanceWindow[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow.verify(message.weeklyMaintenanceWindow[i], long + 1);
                                         if (error)
                                             return "weeklyMaintenanceWindow." + error;
                                     }
@@ -26575,19 +27595,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy} ClusterMaintenancePolicy
                              */
-                            ClusterMaintenancePolicy.fromObject = function fromObject(object) {
+                            ClusterMaintenancePolicy.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy();
                                 if (object.createTime != null) {
                                     if (typeof object.createTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy.createTime: object expected");
-                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                                 }
                                 if (object.updateTime != null) {
                                     if (typeof object.updateTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy.updateTime: object expected");
-                                    message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                    message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                                 }
                                 if (object.weeklyMaintenanceWindow) {
                                     if (!Array.isArray(object.weeklyMaintenanceWindow))
@@ -26596,7 +27620,7 @@
                                     for (var i = 0; i < object.weeklyMaintenanceWindow.length; ++i) {
                                         if (typeof object.weeklyMaintenanceWindow[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.ClusterMaintenancePolicy.weeklyMaintenanceWindow: object expected");
-                                        message.weeklyMaintenanceWindow[i] = $root.google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow.fromObject(object.weeklyMaintenanceWindow[i]);
+                                        message.weeklyMaintenanceWindow[i] = $root.google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow.fromObject(object.weeklyMaintenanceWindow[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -26683,7 +27707,7 @@
                             function ClusterWeeklyMaintenanceWindow(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -26758,9 +27782,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ClusterWeeklyMaintenanceWindow.decode = function decode(reader, length, error) {
+                            ClusterWeeklyMaintenanceWindow.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -26772,11 +27800,11 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32());
+                                            message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -26807,9 +27835,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ClusterWeeklyMaintenanceWindow.verify = function verify(message) {
+                            ClusterWeeklyMaintenanceWindow.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.day != null && message.hasOwnProperty("day"))
                                     switch (message.day) {
                                     default:
@@ -26825,7 +27857,7 @@
                                         break;
                                     }
                                 if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                    var error = $root.google.type.TimeOfDay.verify(message.startTime);
+                                    var error = $root.google.type.TimeOfDay.verify(message.startTime, long + 1);
                                     if (error)
                                         return "startTime." + error;
                                 }
@@ -26840,9 +27872,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow} ClusterWeeklyMaintenanceWindow
                              */
-                            ClusterWeeklyMaintenanceWindow.fromObject = function fromObject(object) {
+                            ClusterWeeklyMaintenanceWindow.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow();
                                 switch (object.day) {
                                 default:
@@ -26887,7 +27923,7 @@
                                 if (object.startTime != null) {
                                     if (typeof object.startTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.ClusterWeeklyMaintenanceWindow.startTime: object expected");
-                                    message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime);
+                                    message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime, long + 1);
                                 }
                                 return message;
                             };
@@ -26966,7 +28002,7 @@
                             function ClusterMaintenanceSchedule(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -27041,9 +28077,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ClusterMaintenanceSchedule.decode = function decode(reader, length, error) {
+                            ClusterMaintenanceSchedule.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -27051,15 +28091,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -27090,16 +28130,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ClusterMaintenanceSchedule.verify = function verify(message) {
+                            ClusterMaintenanceSchedule.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                     if (error)
                                         return "startTime." + error;
                                 }
                                 if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                     if (error)
                                         return "endTime." + error;
                                 }
@@ -27114,19 +28158,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule} ClusterMaintenanceSchedule
                              */
-                            ClusterMaintenanceSchedule.fromObject = function fromObject(object) {
+                            ClusterMaintenanceSchedule.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule();
                                 if (object.startTime != null) {
                                     if (typeof object.startTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule.startTime: object expected");
-                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                                 }
                                 if (object.endTime != null) {
                                     if (typeof object.endTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.ClusterMaintenanceSchedule.endTime: object expected");
-                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                                 }
                                 return message;
                             };
@@ -27204,7 +28252,7 @@
                             function PscConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -27269,9 +28317,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PscConfig.decode = function decode(reader, length, error) {
+                            PscConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.PscConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -27283,7 +28335,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -27314,9 +28366,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PscConfig.verify = function verify(message) {
+                            PscConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.network != null && message.hasOwnProperty("network"))
                                     if (!$util.isString(message.network))
                                         return "network: string expected";
@@ -27331,9 +28387,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.PscConfig} PscConfig
                              */
-                            PscConfig.fromObject = function fromObject(object) {
+                            PscConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.PscConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.PscConfig();
                                 if (object.network != null)
                                     message.network = String(object.network);
@@ -27411,7 +28471,7 @@
                             function DiscoveryEndpoint(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -27496,9 +28556,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DiscoveryEndpoint.decode = function decode(reader, length, error) {
+                            DiscoveryEndpoint.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -27514,11 +28578,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.pscConfig = $root.google.cloud.redis.cluster.v1beta1.PscConfig.decode(reader, reader.uint32());
+                                            message.pscConfig = $root.google.cloud.redis.cluster.v1beta1.PscConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -27549,9 +28613,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DiscoveryEndpoint.verify = function verify(message) {
+                            DiscoveryEndpoint.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.address != null && message.hasOwnProperty("address"))
                                     if (!$util.isString(message.address))
                                         return "address: string expected";
@@ -27559,7 +28627,7 @@
                                     if (!$util.isInteger(message.port))
                                         return "port: integer expected";
                                 if (message.pscConfig != null && message.hasOwnProperty("pscConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.PscConfig.verify(message.pscConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.PscConfig.verify(message.pscConfig, long + 1);
                                     if (error)
                                         return "pscConfig." + error;
                                 }
@@ -27574,9 +28642,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint} DiscoveryEndpoint
                              */
-                            DiscoveryEndpoint.fromObject = function fromObject(object) {
+                            DiscoveryEndpoint.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint();
                                 if (object.address != null)
                                     message.address = String(object.address);
@@ -27585,7 +28657,7 @@
                                 if (object.pscConfig != null) {
                                     if (typeof object.pscConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.DiscoveryEndpoint.pscConfig: object expected");
-                                    message.pscConfig = $root.google.cloud.redis.cluster.v1beta1.PscConfig.fromObject(object.pscConfig);
+                                    message.pscConfig = $root.google.cloud.redis.cluster.v1beta1.PscConfig.fromObject(object.pscConfig, long + 1);
                                 }
                                 return message;
                             };
@@ -27673,7 +28745,7 @@
                             function PscConnection(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -27808,9 +28880,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PscConnection.decode = function decode(reader, length, error) {
+                            PscConnection.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.PscConnection();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -27850,7 +28926,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -27881,9 +28957,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PscConnection.verify = function verify(message) {
+                            PscConnection.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.pscConnectionId != null && message.hasOwnProperty("pscConnectionId"))
                                     if (!$util.isString(message.pscConnectionId))
                                         return "pscConnectionId: string expected";
@@ -27932,9 +29012,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.PscConnection} PscConnection
                              */
-                            PscConnection.fromObject = function fromObject(object) {
+                            PscConnection.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.PscConnection)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.PscConnection();
                                 if (object.pscConnectionId != null)
                                     message.pscConnectionId = String(object.pscConnectionId);
@@ -28087,7 +29171,7 @@
                                 this.connections = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -28153,9 +29237,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ClusterEndpoint.decode = function decode(reader, length, error) {
+                            ClusterEndpoint.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ClusterEndpoint();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -28165,11 +29253,11 @@
                                     case 1: {
                                             if (!(message.connections && message.connections.length))
                                                 message.connections = [];
-                                            message.connections.push($root.google.cloud.redis.cluster.v1beta1.ConnectionDetail.decode(reader, reader.uint32()));
+                                            message.connections.push($root.google.cloud.redis.cluster.v1beta1.ConnectionDetail.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -28200,14 +29288,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ClusterEndpoint.verify = function verify(message) {
+                            ClusterEndpoint.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.connections != null && message.hasOwnProperty("connections")) {
                                     if (!Array.isArray(message.connections))
                                         return "connections: array expected";
                                     for (var i = 0; i < message.connections.length; ++i) {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.ConnectionDetail.verify(message.connections[i]);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.ConnectionDetail.verify(message.connections[i], long + 1);
                                         if (error)
                                             return "connections." + error;
                                     }
@@ -28223,9 +29315,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ClusterEndpoint} ClusterEndpoint
                              */
-                            ClusterEndpoint.fromObject = function fromObject(object) {
+                            ClusterEndpoint.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ClusterEndpoint)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ClusterEndpoint();
                                 if (object.connections) {
                                     if (!Array.isArray(object.connections))
@@ -28234,7 +29330,7 @@
                                     for (var i = 0; i < object.connections.length; ++i) {
                                         if (typeof object.connections[i] !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.ClusterEndpoint.connections: object expected");
-                                        message.connections[i] = $root.google.cloud.redis.cluster.v1beta1.ConnectionDetail.fromObject(object.connections[i]);
+                                        message.connections[i] = $root.google.cloud.redis.cluster.v1beta1.ConnectionDetail.fromObject(object.connections[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -28313,7 +29409,7 @@
                             function ConnectionDetail(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -28402,9 +29498,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConnectionDetail.decode = function decode(reader, length, error) {
+                            ConnectionDetail.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ConnectionDetail();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -28412,15 +29512,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.pscAutoConnection = $root.google.cloud.redis.cluster.v1beta1.PscAutoConnection.decode(reader, reader.uint32());
+                                            message.pscAutoConnection = $root.google.cloud.redis.cluster.v1beta1.PscAutoConnection.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.pscConnection = $root.google.cloud.redis.cluster.v1beta1.PscConnection.decode(reader, reader.uint32());
+                                            message.pscConnection = $root.google.cloud.redis.cluster.v1beta1.PscConnection.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -28451,14 +29551,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConnectionDetail.verify = function verify(message) {
+                            ConnectionDetail.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.pscAutoConnection != null && message.hasOwnProperty("pscAutoConnection")) {
                                     properties.connection = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.PscAutoConnection.verify(message.pscAutoConnection);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.PscAutoConnection.verify(message.pscAutoConnection, long + 1);
                                         if (error)
                                             return "pscAutoConnection." + error;
                                     }
@@ -28468,7 +29572,7 @@
                                         return "connection: multiple values";
                                     properties.connection = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.PscConnection.verify(message.pscConnection);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.PscConnection.verify(message.pscConnection, long + 1);
                                         if (error)
                                             return "pscConnection." + error;
                                     }
@@ -28484,19 +29588,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ConnectionDetail} ConnectionDetail
                              */
-                            ConnectionDetail.fromObject = function fromObject(object) {
+                            ConnectionDetail.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ConnectionDetail)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ConnectionDetail();
                                 if (object.pscAutoConnection != null) {
                                     if (typeof object.pscAutoConnection !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.ConnectionDetail.pscAutoConnection: object expected");
-                                    message.pscAutoConnection = $root.google.cloud.redis.cluster.v1beta1.PscAutoConnection.fromObject(object.pscAutoConnection);
+                                    message.pscAutoConnection = $root.google.cloud.redis.cluster.v1beta1.PscAutoConnection.fromObject(object.pscAutoConnection, long + 1);
                                 }
                                 if (object.pscConnection != null) {
                                     if (typeof object.pscConnection !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.ConnectionDetail.pscConnection: object expected");
-                                    message.pscConnection = $root.google.cloud.redis.cluster.v1beta1.PscConnection.fromObject(object.pscConnection);
+                                    message.pscConnection = $root.google.cloud.redis.cluster.v1beta1.PscConnection.fromObject(object.pscConnection, long + 1);
                                 }
                                 return message;
                             };
@@ -28583,7 +29691,7 @@
                             function PscAutoConnection(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -28718,9 +29826,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PscAutoConnection.decode = function decode(reader, length, error) {
+                            PscAutoConnection.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.PscAutoConnection();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -28760,7 +29872,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -28791,9 +29903,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PscAutoConnection.verify = function verify(message) {
+                            PscAutoConnection.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.pscConnectionId != null && message.hasOwnProperty("pscConnectionId"))
                                     if (!$util.isString(message.pscConnectionId))
                                         return "pscConnectionId: string expected";
@@ -28842,9 +29958,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.PscAutoConnection} PscAutoConnection
                              */
-                            PscAutoConnection.fromObject = function fromObject(object) {
+                            PscAutoConnection.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.PscAutoConnection)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.PscAutoConnection();
                                 if (object.pscConnectionId != null)
                                     message.pscConnectionId = String(object.pscConnectionId);
@@ -28997,7 +30117,7 @@
                             function SharedRegionalCertificateAuthority(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -29086,9 +30206,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SharedRegionalCertificateAuthority.decode = function decode(reader, length, error) {
+                            SharedRegionalCertificateAuthority.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -29096,7 +30220,7 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 2: {
-                                            message.managedServerCa = $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.decode(reader, reader.uint32());
+                                            message.managedServerCa = $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 1: {
@@ -29104,7 +30228,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -29135,14 +30259,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SharedRegionalCertificateAuthority.verify = function verify(message) {
+                            SharedRegionalCertificateAuthority.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.managedServerCa != null && message.hasOwnProperty("managedServerCa")) {
                                     properties.serverCa = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.verify(message.managedServerCa);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.verify(message.managedServerCa, long + 1);
                                         if (error)
                                             return "managedServerCa." + error;
                                     }
@@ -29161,14 +30289,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority} SharedRegionalCertificateAuthority
                              */
-                            SharedRegionalCertificateAuthority.fromObject = function fromObject(object) {
+                            SharedRegionalCertificateAuthority.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority();
                                 if (object.managedServerCa != null) {
                                     if (typeof object.managedServerCa !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.managedServerCa: object expected");
-                                    message.managedServerCa = $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.fromObject(object.managedServerCa);
+                                    message.managedServerCa = $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.fromObject(object.managedServerCa, long + 1);
                                 }
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -29247,7 +30379,7 @@
                                     this.caCerts = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -29313,9 +30445,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                RegionalManagedCertificateAuthority.decode = function decode(reader, length, error) {
+                                RegionalManagedCertificateAuthority.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -29325,11 +30461,11 @@
                                         case 1: {
                                                 if (!(message.caCerts && message.caCerts.length))
                                                     message.caCerts = [];
-                                                message.caCerts.push($root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.decode(reader, reader.uint32()));
+                                                message.caCerts.push($root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -29360,14 +30496,18 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                RegionalManagedCertificateAuthority.verify = function verify(message) {
+                                RegionalManagedCertificateAuthority.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.caCerts != null && message.hasOwnProperty("caCerts")) {
                                         if (!Array.isArray(message.caCerts))
                                             return "caCerts: array expected";
                                         for (var i = 0; i < message.caCerts.length; ++i) {
-                                            var error = $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.verify(message.caCerts[i]);
+                                            var error = $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.verify(message.caCerts[i], long + 1);
                                             if (error)
                                                 return "caCerts." + error;
                                         }
@@ -29383,9 +30523,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority} RegionalManagedCertificateAuthority
                                  */
-                                RegionalManagedCertificateAuthority.fromObject = function fromObject(object) {
+                                RegionalManagedCertificateAuthority.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority();
                                     if (object.caCerts) {
                                         if (!Array.isArray(object.caCerts))
@@ -29394,7 +30538,7 @@
                                         for (var i = 0; i < object.caCerts.length; ++i) {
                                             if (typeof object.caCerts[i] !== "object")
                                                 throw TypeError(".google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.caCerts: object expected");
-                                            message.caCerts[i] = $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.fromObject(object.caCerts[i]);
+                                            message.caCerts[i] = $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain.fromObject(object.caCerts[i], long + 1);
                                         }
                                     }
                                     return message;
@@ -29470,7 +30614,7 @@
                                         this.certificates = [];
                                         if (properties)
                                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                                if (properties[keys[i]] != null)
+                                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                     this[keys[i]] = properties[keys[i]];
                                     }
     
@@ -29536,9 +30680,13 @@
                                      * @throws {Error} If the payload is not a reader or valid buffer
                                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                      */
-                                    RegionalCertChain.decode = function decode(reader, length, error) {
+                                    RegionalCertChain.decode = function decode(reader, length, error, long) {
                                         if (!(reader instanceof $Reader))
                                             reader = $Reader.create(reader);
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $Reader.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain();
                                         while (reader.pos < end) {
                                             var tag = reader.uint32();
@@ -29552,7 +30700,7 @@
                                                     break;
                                                 }
                                             default:
-                                                reader.skipType(tag & 7);
+                                                reader.skipType(tag & 7, long);
                                                 break;
                                             }
                                         }
@@ -29583,9 +30731,13 @@
                                      * @param {Object.<string,*>} message Plain object to verify
                                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                      */
-                                    RegionalCertChain.verify = function verify(message) {
+                                    RegionalCertChain.verify = function verify(message, long) {
                                         if (typeof message !== "object" || message === null)
                                             return "object expected";
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            return "maximum nesting depth exceeded";
                                         if (message.certificates != null && message.hasOwnProperty("certificates")) {
                                             if (!Array.isArray(message.certificates))
                                                 return "certificates: array expected";
@@ -29604,9 +30756,13 @@
                                      * @param {Object.<string,*>} object Plain object
                                      * @returns {google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain} RegionalCertChain
                                      */
-                                    RegionalCertChain.fromObject = function fromObject(object) {
+                                    RegionalCertChain.fromObject = function fromObject(object, long) {
                                         if (object instanceof $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain)
                                             return object;
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var message = new $root.google.cloud.redis.cluster.v1beta1.SharedRegionalCertificateAuthority.RegionalManagedCertificateAuthority.RegionalCertChain();
                                         if (object.certificates) {
                                             if (!Array.isArray(object.certificates))
@@ -29696,7 +30852,7 @@
                             function GetSharedRegionalCertificateAuthorityRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -29761,9 +30917,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GetSharedRegionalCertificateAuthorityRequest.decode = function decode(reader, length, error) {
+                            GetSharedRegionalCertificateAuthorityRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.GetSharedRegionalCertificateAuthorityRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -29775,7 +30935,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -29806,9 +30966,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GetSharedRegionalCertificateAuthorityRequest.verify = function verify(message) {
+                            GetSharedRegionalCertificateAuthorityRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -29823,9 +30987,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.GetSharedRegionalCertificateAuthorityRequest} GetSharedRegionalCertificateAuthorityRequest
                              */
-                            GetSharedRegionalCertificateAuthorityRequest.fromObject = function fromObject(object) {
+                            GetSharedRegionalCertificateAuthorityRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.GetSharedRegionalCertificateAuthorityRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.GetSharedRegionalCertificateAuthorityRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -29907,7 +31075,7 @@
                             function OperationMetadata(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -30032,9 +31200,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            OperationMetadata.decode = function decode(reader, length, error) {
+                            OperationMetadata.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.OperationMetadata();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -30042,11 +31214,11 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -30070,7 +31242,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -30101,16 +31273,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            OperationMetadata.verify = function verify(message) {
+                            OperationMetadata.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                     if (error)
                                         return "createTime." + error;
                                 }
                                 if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                     if (error)
                                         return "endTime." + error;
                                 }
@@ -30140,19 +31316,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.OperationMetadata} OperationMetadata
                              */
-                            OperationMetadata.fromObject = function fromObject(object) {
+                            OperationMetadata.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.OperationMetadata)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.OperationMetadata();
                                 if (object.createTime != null) {
                                     if (typeof object.createTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.OperationMetadata.createTime: object expected");
-                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                    message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                                 }
                                 if (object.endTime != null) {
                                     if (typeof object.endTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.OperationMetadata.endTime: object expected");
-                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                                 }
                                 if (object.target != null)
                                     message.target = String(object.target);
@@ -30256,7 +31436,7 @@
                             function CertificateAuthority(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -30345,9 +31525,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            CertificateAuthority.decode = function decode(reader, length, error) {
+                            CertificateAuthority.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -30355,7 +31539,7 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.managedServerCa = $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.decode(reader, reader.uint32());
+                                            message.managedServerCa = $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
@@ -30363,7 +31547,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -30394,14 +31578,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            CertificateAuthority.verify = function verify(message) {
+                            CertificateAuthority.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.managedServerCa != null && message.hasOwnProperty("managedServerCa")) {
                                     properties.serverCa = 1;
                                     {
-                                        var error = $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.verify(message.managedServerCa);
+                                        var error = $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.verify(message.managedServerCa, long + 1);
                                         if (error)
                                             return "managedServerCa." + error;
                                     }
@@ -30420,14 +31608,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.CertificateAuthority} CertificateAuthority
                              */
-                            CertificateAuthority.fromObject = function fromObject(object) {
+                            CertificateAuthority.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority();
                                 if (object.managedServerCa != null) {
                                     if (typeof object.managedServerCa !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.CertificateAuthority.managedServerCa: object expected");
-                                    message.managedServerCa = $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.fromObject(object.managedServerCa);
+                                    message.managedServerCa = $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.fromObject(object.managedServerCa, long + 1);
                                 }
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -30506,7 +31698,7 @@
                                     this.caCerts = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -30572,9 +31764,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                ManagedCertificateAuthority.decode = function decode(reader, length, error) {
+                                ManagedCertificateAuthority.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -30584,11 +31780,11 @@
                                         case 1: {
                                                 if (!(message.caCerts && message.caCerts.length))
                                                     message.caCerts = [];
-                                                message.caCerts.push($root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.CertChain.decode(reader, reader.uint32()));
+                                                message.caCerts.push($root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.CertChain.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -30619,14 +31815,18 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                ManagedCertificateAuthority.verify = function verify(message) {
+                                ManagedCertificateAuthority.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.caCerts != null && message.hasOwnProperty("caCerts")) {
                                         if (!Array.isArray(message.caCerts))
                                             return "caCerts: array expected";
                                         for (var i = 0; i < message.caCerts.length; ++i) {
-                                            var error = $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.CertChain.verify(message.caCerts[i]);
+                                            var error = $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.CertChain.verify(message.caCerts[i], long + 1);
                                             if (error)
                                                 return "caCerts." + error;
                                         }
@@ -30642,9 +31842,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority} ManagedCertificateAuthority
                                  */
-                                ManagedCertificateAuthority.fromObject = function fromObject(object) {
+                                ManagedCertificateAuthority.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority();
                                     if (object.caCerts) {
                                         if (!Array.isArray(object.caCerts))
@@ -30653,7 +31857,7 @@
                                         for (var i = 0; i < object.caCerts.length; ++i) {
                                             if (typeof object.caCerts[i] !== "object")
                                                 throw TypeError(".google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.caCerts: object expected");
-                                            message.caCerts[i] = $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.CertChain.fromObject(object.caCerts[i]);
+                                            message.caCerts[i] = $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.CertChain.fromObject(object.caCerts[i], long + 1);
                                         }
                                     }
                                     return message;
@@ -30729,7 +31933,7 @@
                                         this.certificates = [];
                                         if (properties)
                                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                                if (properties[keys[i]] != null)
+                                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                     this[keys[i]] = properties[keys[i]];
                                     }
     
@@ -30795,9 +31999,13 @@
                                      * @throws {Error} If the payload is not a reader or valid buffer
                                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                      */
-                                    CertChain.decode = function decode(reader, length, error) {
+                                    CertChain.decode = function decode(reader, length, error, long) {
                                         if (!(reader instanceof $Reader))
                                             reader = $Reader.create(reader);
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $Reader.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.CertChain();
                                         while (reader.pos < end) {
                                             var tag = reader.uint32();
@@ -30811,7 +32019,7 @@
                                                     break;
                                                 }
                                             default:
-                                                reader.skipType(tag & 7);
+                                                reader.skipType(tag & 7, long);
                                                 break;
                                             }
                                         }
@@ -30842,9 +32050,13 @@
                                      * @param {Object.<string,*>} message Plain object to verify
                                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                      */
-                                    CertChain.verify = function verify(message) {
+                                    CertChain.verify = function verify(message, long) {
                                         if (typeof message !== "object" || message === null)
                                             return "object expected";
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            return "maximum nesting depth exceeded";
                                         if (message.certificates != null && message.hasOwnProperty("certificates")) {
                                             if (!Array.isArray(message.certificates))
                                                 return "certificates: array expected";
@@ -30863,9 +32075,13 @@
                                      * @param {Object.<string,*>} object Plain object
                                      * @returns {google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.CertChain} CertChain
                                      */
-                                    CertChain.fromObject = function fromObject(object) {
+                                    CertChain.fromObject = function fromObject(object, long) {
                                         if (object instanceof $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.CertChain)
                                             return object;
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var message = new $root.google.cloud.redis.cluster.v1beta1.CertificateAuthority.ManagedCertificateAuthority.CertChain();
                                         if (object.certificates) {
                                             if (!Array.isArray(object.certificates))
@@ -30957,7 +32173,7 @@
                             function ClusterPersistenceConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -31042,9 +32258,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ClusterPersistenceConfig.decode = function decode(reader, length, error) {
+                            ClusterPersistenceConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -31056,15 +32276,15 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.rdbConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig.decode(reader, reader.uint32());
+                                            message.rdbConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
-                                            message.aofConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.AOFConfig.decode(reader, reader.uint32());
+                                            message.aofConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.AOFConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -31095,9 +32315,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ClusterPersistenceConfig.verify = function verify(message) {
+                            ClusterPersistenceConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -31109,12 +32333,12 @@
                                         break;
                                     }
                                 if (message.rdbConfig != null && message.hasOwnProperty("rdbConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig.verify(message.rdbConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig.verify(message.rdbConfig, long + 1);
                                     if (error)
                                         return "rdbConfig." + error;
                                 }
                                 if (message.aofConfig != null && message.hasOwnProperty("aofConfig")) {
-                                    var error = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.AOFConfig.verify(message.aofConfig);
+                                    var error = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.AOFConfig.verify(message.aofConfig, long + 1);
                                     if (error)
                                         return "aofConfig." + error;
                                 }
@@ -31129,9 +32353,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig} ClusterPersistenceConfig
                              */
-                            ClusterPersistenceConfig.fromObject = function fromObject(object) {
+                            ClusterPersistenceConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig();
                                 switch (object.mode) {
                                 default:
@@ -31160,12 +32388,12 @@
                                 if (object.rdbConfig != null) {
                                     if (typeof object.rdbConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.rdbConfig: object expected");
-                                    message.rdbConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig.fromObject(object.rdbConfig);
+                                    message.rdbConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig.fromObject(object.rdbConfig, long + 1);
                                 }
                                 if (object.aofConfig != null) {
                                     if (typeof object.aofConfig !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.aofConfig: object expected");
-                                    message.aofConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.AOFConfig.fromObject(object.aofConfig);
+                                    message.aofConfig = $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.AOFConfig.fromObject(object.aofConfig, long + 1);
                                 }
                                 return message;
                             };
@@ -31244,7 +32472,7 @@
                                 function RDBConfig(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -31319,9 +32547,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                RDBConfig.decode = function decode(reader, length, error) {
+                                RDBConfig.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -31333,11 +32565,11 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                                message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -31368,9 +32600,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                RDBConfig.verify = function verify(message) {
+                                RDBConfig.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.rdbSnapshotPeriod != null && message.hasOwnProperty("rdbSnapshotPeriod"))
                                         switch (message.rdbSnapshotPeriod) {
                                         default:
@@ -31383,7 +32619,7 @@
                                             break;
                                         }
                                     if (message.rdbSnapshotStartTime != null && message.hasOwnProperty("rdbSnapshotStartTime")) {
-                                        var error = $root.google.protobuf.Timestamp.verify(message.rdbSnapshotStartTime);
+                                        var error = $root.google.protobuf.Timestamp.verify(message.rdbSnapshotStartTime, long + 1);
                                         if (error)
                                             return "rdbSnapshotStartTime." + error;
                                     }
@@ -31398,9 +32634,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig} RDBConfig
                                  */
-                                RDBConfig.fromObject = function fromObject(object) {
+                                RDBConfig.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig();
                                     switch (object.rdbSnapshotPeriod) {
                                     default:
@@ -31433,7 +32673,7 @@
                                     if (object.rdbSnapshotStartTime != null) {
                                         if (typeof object.rdbSnapshotStartTime !== "object")
                                             throw TypeError(".google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.RDBConfig.rdbSnapshotStartTime: object expected");
-                                        message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.fromObject(object.rdbSnapshotStartTime);
+                                        message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.fromObject(object.rdbSnapshotStartTime, long + 1);
                                     }
                                     return message;
                                 };
@@ -31531,7 +32771,7 @@
                                 function AOFConfig(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -31596,9 +32836,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                AOFConfig.decode = function decode(reader, length, error) {
+                                AOFConfig.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.AOFConfig();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -31610,7 +32854,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -31641,9 +32885,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                AOFConfig.verify = function verify(message) {
+                                AOFConfig.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.appendFsync != null && message.hasOwnProperty("appendFsync"))
                                         switch (message.appendFsync) {
                                         default:
@@ -31665,9 +32913,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.AOFConfig} AOFConfig
                                  */
-                                AOFConfig.fromObject = function fromObject(object) {
+                                AOFConfig.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.AOFConfig)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.redis.cluster.v1beta1.ClusterPersistenceConfig.AOFConfig();
                                     switch (object.appendFsync) {
                                     default:
@@ -31805,7 +33057,7 @@
                             function ZoneDistributionConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -31880,9 +33132,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ZoneDistributionConfig.decode = function decode(reader, length, error) {
+                            ZoneDistributionConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.ZoneDistributionConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -31898,7 +33154,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -31929,9 +33185,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ZoneDistributionConfig.verify = function verify(message) {
+                            ZoneDistributionConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -31955,9 +33215,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.ZoneDistributionConfig} ZoneDistributionConfig
                              */
-                            ZoneDistributionConfig.fromObject = function fromObject(object) {
+                            ZoneDistributionConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.ZoneDistributionConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.ZoneDistributionConfig();
                                 switch (object.mode) {
                                 default:
@@ -32075,7 +33339,7 @@
                             function RescheduleClusterMaintenanceRequest(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -32160,9 +33424,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RescheduleClusterMaintenanceRequest.decode = function decode(reader, length, error) {
+                            RescheduleClusterMaintenanceRequest.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.RescheduleClusterMaintenanceRequest();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -32178,11 +33446,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.scheduleTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.scheduleTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -32213,9 +33481,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RescheduleClusterMaintenanceRequest.verify = function verify(message) {
+                            RescheduleClusterMaintenanceRequest.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     if (!$util.isString(message.name))
                                         return "name: string expected";
@@ -32229,7 +33501,7 @@
                                         break;
                                     }
                                 if (message.scheduleTime != null && message.hasOwnProperty("scheduleTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.scheduleTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.scheduleTime, long + 1);
                                     if (error)
                                         return "scheduleTime." + error;
                                 }
@@ -32244,9 +33516,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.RescheduleClusterMaintenanceRequest} RescheduleClusterMaintenanceRequest
                              */
-                            RescheduleClusterMaintenanceRequest.fromObject = function fromObject(object) {
+                            RescheduleClusterMaintenanceRequest.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.RescheduleClusterMaintenanceRequest)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.RescheduleClusterMaintenanceRequest();
                                 if (object.name != null)
                                     message.name = String(object.name);
@@ -32273,7 +33549,7 @@
                                 if (object.scheduleTime != null) {
                                     if (typeof object.scheduleTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.RescheduleClusterMaintenanceRequest.scheduleTime: object expected");
-                                    message.scheduleTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleTime);
+                                    message.scheduleTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleTime, long + 1);
                                 }
                                 return message;
                             };
@@ -32374,7 +33650,7 @@
                                 this.kmsKeyVersions = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -32470,9 +33746,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            EncryptionInfo.decode = function decode(reader, length, error) {
+                            EncryptionInfo.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -32494,11 +33774,11 @@
                                             break;
                                         }
                                     case 4: {
-                                            message.lastUpdateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.lastUpdateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -32529,9 +33809,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            EncryptionInfo.verify = function verify(message) {
+                            EncryptionInfo.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.encryptionType != null && message.hasOwnProperty("encryptionType"))
                                     switch (message.encryptionType) {
                                     default:
@@ -32564,7 +33848,7 @@
                                         break;
                                     }
                                 if (message.lastUpdateTime != null && message.hasOwnProperty("lastUpdateTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.lastUpdateTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.lastUpdateTime, long + 1);
                                     if (error)
                                         return "lastUpdateTime." + error;
                                 }
@@ -32579,9 +33863,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.redis.cluster.v1beta1.EncryptionInfo} EncryptionInfo
                              */
-                            EncryptionInfo.fromObject = function fromObject(object) {
+                            EncryptionInfo.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.redis.cluster.v1beta1.EncryptionInfo();
                                 switch (object.encryptionType) {
                                 default:
@@ -32657,7 +33945,7 @@
                                 if (object.lastUpdateTime != null) {
                                     if (typeof object.lastUpdateTime !== "object")
                                         throw TypeError(".google.cloud.redis.cluster.v1beta1.EncryptionInfo.lastUpdateTime: object expected");
-                                    message.lastUpdateTime = $root.google.protobuf.Timestamp.fromObject(object.lastUpdateTime);
+                                    message.lastUpdateTime = $root.google.protobuf.Timestamp.fromObject(object.lastUpdateTime, long + 1);
                                 }
                                 return message;
                             };
@@ -32812,7 +34100,7 @@
                     this.rules = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -32888,9 +34176,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Http.decode = function decode(reader, length, error) {
+                Http.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Http();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -32900,7 +34192,7 @@
                         case 1: {
                                 if (!(message.rules && message.rules.length))
                                     message.rules = [];
-                                message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32()));
+                                message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
@@ -32908,7 +34200,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -32939,14 +34231,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Http.verify = function verify(message) {
+                Http.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.rules != null && message.hasOwnProperty("rules")) {
                         if (!Array.isArray(message.rules))
                             return "rules: array expected";
                         for (var i = 0; i < message.rules.length; ++i) {
-                            var error = $root.google.api.HttpRule.verify(message.rules[i]);
+                            var error = $root.google.api.HttpRule.verify(message.rules[i], long + 1);
                             if (error)
                                 return "rules." + error;
                         }
@@ -32965,9 +34261,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.Http} Http
                  */
-                Http.fromObject = function fromObject(object) {
+                Http.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.Http)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.Http();
                     if (object.rules) {
                         if (!Array.isArray(object.rules))
@@ -32976,7 +34276,7 @@
                         for (var i = 0; i < object.rules.length; ++i) {
                             if (typeof object.rules[i] !== "object")
                                 throw TypeError(".google.api.Http.rules: object expected");
-                            message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i]);
+                            message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i], long + 1);
                         }
                     }
                     if (object.fullyDecodeReservedExpansion != null)
@@ -33070,7 +34370,7 @@
                     this.additionalBindings = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -33240,9 +34540,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                HttpRule.decode = function decode(reader, length, error) {
+                HttpRule.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.HttpRule();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -33274,7 +34578,7 @@
                                 break;
                             }
                         case 8: {
-                                message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32());
+                                message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 7: {
@@ -33288,11 +34592,11 @@
                         case 11: {
                                 if (!(message.additionalBindings && message.additionalBindings.length))
                                     message.additionalBindings = [];
-                                message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32()));
+                                message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -33323,9 +34627,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                HttpRule.verify = function verify(message) {
+                HttpRule.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.selector != null && message.hasOwnProperty("selector"))
                         if (!$util.isString(message.selector))
@@ -33368,7 +34676,7 @@
                             return "pattern: multiple values";
                         properties.pattern = 1;
                         {
-                            var error = $root.google.api.CustomHttpPattern.verify(message.custom);
+                            var error = $root.google.api.CustomHttpPattern.verify(message.custom, long + 1);
                             if (error)
                                 return "custom." + error;
                         }
@@ -33383,7 +34691,7 @@
                         if (!Array.isArray(message.additionalBindings))
                             return "additionalBindings: array expected";
                         for (var i = 0; i < message.additionalBindings.length; ++i) {
-                            var error = $root.google.api.HttpRule.verify(message.additionalBindings[i]);
+                            var error = $root.google.api.HttpRule.verify(message.additionalBindings[i], long + 1);
                             if (error)
                                 return "additionalBindings." + error;
                         }
@@ -33399,9 +34707,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.HttpRule} HttpRule
                  */
-                HttpRule.fromObject = function fromObject(object) {
+                HttpRule.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.HttpRule)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.HttpRule();
                     if (object.selector != null)
                         message.selector = String(object.selector);
@@ -33418,7 +34730,7 @@
                     if (object.custom != null) {
                         if (typeof object.custom !== "object")
                             throw TypeError(".google.api.HttpRule.custom: object expected");
-                        message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom);
+                        message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom, long + 1);
                     }
                     if (object.body != null)
                         message.body = String(object.body);
@@ -33431,7 +34743,7 @@
                         for (var i = 0; i < object.additionalBindings.length; ++i) {
                             if (typeof object.additionalBindings[i] !== "object")
                                 throw TypeError(".google.api.HttpRule.additionalBindings: object expected");
-                            message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i]);
+                            message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i], long + 1);
                         }
                     }
                     return message;
@@ -33551,7 +34863,7 @@
                 function CustomHttpPattern(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -33626,9 +34938,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CustomHttpPattern.decode = function decode(reader, length, error) {
+                CustomHttpPattern.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CustomHttpPattern();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -33644,7 +34960,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -33675,9 +34991,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CustomHttpPattern.verify = function verify(message) {
+                CustomHttpPattern.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.kind != null && message.hasOwnProperty("kind"))
                         if (!$util.isString(message.kind))
                             return "kind: string expected";
@@ -33695,9 +35015,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CustomHttpPattern} CustomHttpPattern
                  */
-                CustomHttpPattern.fromObject = function fromObject(object) {
+                CustomHttpPattern.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CustomHttpPattern)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CustomHttpPattern();
                     if (object.kind != null)
                         message.kind = String(object.kind);
@@ -33782,7 +35106,7 @@
                     this.destinations = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -33871,9 +35195,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CommonLanguageSettings.decode = function decode(reader, length, error) {
+                CommonLanguageSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CommonLanguageSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -33896,11 +35224,11 @@
                                 break;
                             }
                         case 3: {
-                                message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.decode(reader, reader.uint32());
+                                message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -33931,9 +35259,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CommonLanguageSettings.verify = function verify(message) {
+                CommonLanguageSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.referenceDocsUri != null && message.hasOwnProperty("referenceDocsUri"))
                         if (!$util.isString(message.referenceDocsUri))
                             return "referenceDocsUri: string expected";
@@ -33951,7 +35283,7 @@
                             }
                     }
                     if (message.selectiveGapicGeneration != null && message.hasOwnProperty("selectiveGapicGeneration")) {
-                        var error = $root.google.api.SelectiveGapicGeneration.verify(message.selectiveGapicGeneration);
+                        var error = $root.google.api.SelectiveGapicGeneration.verify(message.selectiveGapicGeneration, long + 1);
                         if (error)
                             return "selectiveGapicGeneration." + error;
                     }
@@ -33966,9 +35298,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CommonLanguageSettings} CommonLanguageSettings
                  */
-                CommonLanguageSettings.fromObject = function fromObject(object) {
+                CommonLanguageSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CommonLanguageSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CommonLanguageSettings();
                     if (object.referenceDocsUri != null)
                         message.referenceDocsUri = String(object.referenceDocsUri);
@@ -34000,7 +35336,7 @@
                     if (object.selectiveGapicGeneration != null) {
                         if (typeof object.selectiveGapicGeneration !== "object")
                             throw TypeError(".google.api.CommonLanguageSettings.selectiveGapicGeneration: object expected");
-                        message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.fromObject(object.selectiveGapicGeneration);
+                        message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.fromObject(object.selectiveGapicGeneration, long + 1);
                     }
                     return message;
                 };
@@ -34095,7 +35431,7 @@
                 function ClientLibrarySettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -34260,9 +35596,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ClientLibrarySettings.decode = function decode(reader, length, error) {
+                ClientLibrarySettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ClientLibrarySettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -34282,39 +35622,39 @@
                                 break;
                             }
                         case 21: {
-                                message.javaSettings = $root.google.api.JavaSettings.decode(reader, reader.uint32());
+                                message.javaSettings = $root.google.api.JavaSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 22: {
-                                message.cppSettings = $root.google.api.CppSettings.decode(reader, reader.uint32());
+                                message.cppSettings = $root.google.api.CppSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 23: {
-                                message.phpSettings = $root.google.api.PhpSettings.decode(reader, reader.uint32());
+                                message.phpSettings = $root.google.api.PhpSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 24: {
-                                message.pythonSettings = $root.google.api.PythonSettings.decode(reader, reader.uint32());
+                                message.pythonSettings = $root.google.api.PythonSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 25: {
-                                message.nodeSettings = $root.google.api.NodeSettings.decode(reader, reader.uint32());
+                                message.nodeSettings = $root.google.api.NodeSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 26: {
-                                message.dotnetSettings = $root.google.api.DotnetSettings.decode(reader, reader.uint32());
+                                message.dotnetSettings = $root.google.api.DotnetSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 27: {
-                                message.rubySettings = $root.google.api.RubySettings.decode(reader, reader.uint32());
+                                message.rubySettings = $root.google.api.RubySettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 28: {
-                                message.goSettings = $root.google.api.GoSettings.decode(reader, reader.uint32());
+                                message.goSettings = $root.google.api.GoSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -34345,9 +35685,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ClientLibrarySettings.verify = function verify(message) {
+                ClientLibrarySettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.version != null && message.hasOwnProperty("version"))
                         if (!$util.isString(message.version))
                             return "version: string expected";
@@ -34369,42 +35713,42 @@
                         if (typeof message.restNumericEnums !== "boolean")
                             return "restNumericEnums: boolean expected";
                     if (message.javaSettings != null && message.hasOwnProperty("javaSettings")) {
-                        var error = $root.google.api.JavaSettings.verify(message.javaSettings);
+                        var error = $root.google.api.JavaSettings.verify(message.javaSettings, long + 1);
                         if (error)
                             return "javaSettings." + error;
                     }
                     if (message.cppSettings != null && message.hasOwnProperty("cppSettings")) {
-                        var error = $root.google.api.CppSettings.verify(message.cppSettings);
+                        var error = $root.google.api.CppSettings.verify(message.cppSettings, long + 1);
                         if (error)
                             return "cppSettings." + error;
                     }
                     if (message.phpSettings != null && message.hasOwnProperty("phpSettings")) {
-                        var error = $root.google.api.PhpSettings.verify(message.phpSettings);
+                        var error = $root.google.api.PhpSettings.verify(message.phpSettings, long + 1);
                         if (error)
                             return "phpSettings." + error;
                     }
                     if (message.pythonSettings != null && message.hasOwnProperty("pythonSettings")) {
-                        var error = $root.google.api.PythonSettings.verify(message.pythonSettings);
+                        var error = $root.google.api.PythonSettings.verify(message.pythonSettings, long + 1);
                         if (error)
                             return "pythonSettings." + error;
                     }
                     if (message.nodeSettings != null && message.hasOwnProperty("nodeSettings")) {
-                        var error = $root.google.api.NodeSettings.verify(message.nodeSettings);
+                        var error = $root.google.api.NodeSettings.verify(message.nodeSettings, long + 1);
                         if (error)
                             return "nodeSettings." + error;
                     }
                     if (message.dotnetSettings != null && message.hasOwnProperty("dotnetSettings")) {
-                        var error = $root.google.api.DotnetSettings.verify(message.dotnetSettings);
+                        var error = $root.google.api.DotnetSettings.verify(message.dotnetSettings, long + 1);
                         if (error)
                             return "dotnetSettings." + error;
                     }
                     if (message.rubySettings != null && message.hasOwnProperty("rubySettings")) {
-                        var error = $root.google.api.RubySettings.verify(message.rubySettings);
+                        var error = $root.google.api.RubySettings.verify(message.rubySettings, long + 1);
                         if (error)
                             return "rubySettings." + error;
                     }
                     if (message.goSettings != null && message.hasOwnProperty("goSettings")) {
-                        var error = $root.google.api.GoSettings.verify(message.goSettings);
+                        var error = $root.google.api.GoSettings.verify(message.goSettings, long + 1);
                         if (error)
                             return "goSettings." + error;
                     }
@@ -34419,9 +35763,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ClientLibrarySettings} ClientLibrarySettings
                  */
-                ClientLibrarySettings.fromObject = function fromObject(object) {
+                ClientLibrarySettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ClientLibrarySettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ClientLibrarySettings();
                     if (object.version != null)
                         message.version = String(object.version);
@@ -34470,42 +35818,42 @@
                     if (object.javaSettings != null) {
                         if (typeof object.javaSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.javaSettings: object expected");
-                        message.javaSettings = $root.google.api.JavaSettings.fromObject(object.javaSettings);
+                        message.javaSettings = $root.google.api.JavaSettings.fromObject(object.javaSettings, long + 1);
                     }
                     if (object.cppSettings != null) {
                         if (typeof object.cppSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.cppSettings: object expected");
-                        message.cppSettings = $root.google.api.CppSettings.fromObject(object.cppSettings);
+                        message.cppSettings = $root.google.api.CppSettings.fromObject(object.cppSettings, long + 1);
                     }
                     if (object.phpSettings != null) {
                         if (typeof object.phpSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.phpSettings: object expected");
-                        message.phpSettings = $root.google.api.PhpSettings.fromObject(object.phpSettings);
+                        message.phpSettings = $root.google.api.PhpSettings.fromObject(object.phpSettings, long + 1);
                     }
                     if (object.pythonSettings != null) {
                         if (typeof object.pythonSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.pythonSettings: object expected");
-                        message.pythonSettings = $root.google.api.PythonSettings.fromObject(object.pythonSettings);
+                        message.pythonSettings = $root.google.api.PythonSettings.fromObject(object.pythonSettings, long + 1);
                     }
                     if (object.nodeSettings != null) {
                         if (typeof object.nodeSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.nodeSettings: object expected");
-                        message.nodeSettings = $root.google.api.NodeSettings.fromObject(object.nodeSettings);
+                        message.nodeSettings = $root.google.api.NodeSettings.fromObject(object.nodeSettings, long + 1);
                     }
                     if (object.dotnetSettings != null) {
                         if (typeof object.dotnetSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.dotnetSettings: object expected");
-                        message.dotnetSettings = $root.google.api.DotnetSettings.fromObject(object.dotnetSettings);
+                        message.dotnetSettings = $root.google.api.DotnetSettings.fromObject(object.dotnetSettings, long + 1);
                     }
                     if (object.rubySettings != null) {
                         if (typeof object.rubySettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.rubySettings: object expected");
-                        message.rubySettings = $root.google.api.RubySettings.fromObject(object.rubySettings);
+                        message.rubySettings = $root.google.api.RubySettings.fromObject(object.rubySettings, long + 1);
                     }
                     if (object.goSettings != null) {
                         if (typeof object.goSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.goSettings: object expected");
-                        message.goSettings = $root.google.api.GoSettings.fromObject(object.goSettings);
+                        message.goSettings = $root.google.api.GoSettings.fromObject(object.goSettings, long + 1);
                     }
                     return message;
                 };
@@ -34623,7 +35971,7 @@
                     this.librarySettings = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -34791,9 +36139,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Publishing.decode = function decode(reader, length, error) {
+                Publishing.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Publishing();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -34803,7 +36155,7 @@
                         case 2: {
                                 if (!(message.methodSettings && message.methodSettings.length))
                                     message.methodSettings = [];
-                                message.methodSettings.push($root.google.api.MethodSettings.decode(reader, reader.uint32()));
+                                message.methodSettings.push($root.google.api.MethodSettings.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 101: {
@@ -34839,7 +36191,7 @@
                         case 109: {
                                 if (!(message.librarySettings && message.librarySettings.length))
                                     message.librarySettings = [];
-                                message.librarySettings.push($root.google.api.ClientLibrarySettings.decode(reader, reader.uint32()));
+                                message.librarySettings.push($root.google.api.ClientLibrarySettings.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 110: {
@@ -34851,7 +36203,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -34882,14 +36234,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Publishing.verify = function verify(message) {
+                Publishing.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.methodSettings != null && message.hasOwnProperty("methodSettings")) {
                         if (!Array.isArray(message.methodSettings))
                             return "methodSettings: array expected";
                         for (var i = 0; i < message.methodSettings.length; ++i) {
-                            var error = $root.google.api.MethodSettings.verify(message.methodSettings[i]);
+                            var error = $root.google.api.MethodSettings.verify(message.methodSettings[i], long + 1);
                             if (error)
                                 return "methodSettings." + error;
                         }
@@ -34934,7 +36290,7 @@
                         if (!Array.isArray(message.librarySettings))
                             return "librarySettings: array expected";
                         for (var i = 0; i < message.librarySettings.length; ++i) {
-                            var error = $root.google.api.ClientLibrarySettings.verify(message.librarySettings[i]);
+                            var error = $root.google.api.ClientLibrarySettings.verify(message.librarySettings[i], long + 1);
                             if (error)
                                 return "librarySettings." + error;
                         }
@@ -34956,9 +36312,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.Publishing} Publishing
                  */
-                Publishing.fromObject = function fromObject(object) {
+                Publishing.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.Publishing)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.Publishing();
                     if (object.methodSettings) {
                         if (!Array.isArray(object.methodSettings))
@@ -34967,7 +36327,7 @@
                         for (var i = 0; i < object.methodSettings.length; ++i) {
                             if (typeof object.methodSettings[i] !== "object")
                                 throw TypeError(".google.api.Publishing.methodSettings: object expected");
-                            message.methodSettings[i] = $root.google.api.MethodSettings.fromObject(object.methodSettings[i]);
+                            message.methodSettings[i] = $root.google.api.MethodSettings.fromObject(object.methodSettings[i], long + 1);
                         }
                     }
                     if (object.newIssueUri != null)
@@ -35034,7 +36394,7 @@
                         for (var i = 0; i < object.librarySettings.length; ++i) {
                             if (typeof object.librarySettings[i] !== "object")
                                 throw TypeError(".google.api.Publishing.librarySettings: object expected");
-                            message.librarySettings[i] = $root.google.api.ClientLibrarySettings.fromObject(object.librarySettings[i]);
+                            message.librarySettings[i] = $root.google.api.ClientLibrarySettings.fromObject(object.librarySettings[i], long + 1);
                         }
                     }
                     if (object.protoReferenceDocumentationUri != null)
@@ -35158,7 +36518,7 @@
                     this.serviceClassNames = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -35244,9 +36604,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                JavaSettings.decode = function decode(reader, length, error) {
+                JavaSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.JavaSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -35273,19 +36637,21 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.serviceClassNames, key);
                                 message.serviceClassNames[key] = value;
                                 break;
                             }
                         case 3: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -35316,9 +36682,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                JavaSettings.verify = function verify(message) {
+                JavaSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.libraryPackage != null && message.hasOwnProperty("libraryPackage"))
                         if (!$util.isString(message.libraryPackage))
                             return "libraryPackage: string expected";
@@ -35331,7 +36701,7 @@
                                 return "serviceClassNames: string{k:string} expected";
                     }
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -35346,9 +36716,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.JavaSettings} JavaSettings
                  */
-                JavaSettings.fromObject = function fromObject(object) {
+                JavaSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.JavaSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.JavaSettings();
                     if (object.libraryPackage != null)
                         message.libraryPackage = String(object.libraryPackage);
@@ -35356,13 +36730,16 @@
                         if (typeof object.serviceClassNames !== "object")
                             throw TypeError(".google.api.JavaSettings.serviceClassNames: object expected");
                         message.serviceClassNames = {};
-                        for (var keys = Object.keys(object.serviceClassNames), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.serviceClassNames), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.serviceClassNames, keys[i]);
                             message.serviceClassNames[keys[i]] = String(object.serviceClassNames[keys[i]]);
+                        }
                     }
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.JavaSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -35391,8 +36768,11 @@
                     var keys2;
                     if (message.serviceClassNames && (keys2 = Object.keys(message.serviceClassNames)).length) {
                         object.serviceClassNames = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.serviceClassNames, keys2[j]);
                             object.serviceClassNames[keys2[j]] = message.serviceClassNames[keys2[j]];
+                        }
                     }
                     if (message.common != null && message.hasOwnProperty("common"))
                         object.common = $root.google.api.CommonLanguageSettings.toObject(message.common, options);
@@ -35448,7 +36828,7 @@
                 function CppSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -35513,9 +36893,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CppSettings.decode = function decode(reader, length, error) {
+                CppSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CppSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -35523,11 +36907,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -35558,11 +36942,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CppSettings.verify = function verify(message) {
+                CppSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -35577,14 +36965,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CppSettings} CppSettings
                  */
-                CppSettings.fromObject = function fromObject(object) {
+                CppSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CppSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CppSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.CppSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -35658,7 +37050,7 @@
                 function PhpSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -35723,9 +37115,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                PhpSettings.decode = function decode(reader, length, error) {
+                PhpSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PhpSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -35733,11 +37129,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -35768,11 +37164,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                PhpSettings.verify = function verify(message) {
+                PhpSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -35787,14 +37187,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.PhpSettings} PhpSettings
                  */
-                PhpSettings.fromObject = function fromObject(object) {
+                PhpSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.PhpSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.PhpSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.PhpSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -35869,7 +37273,7 @@
                 function PythonSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -35944,9 +37348,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                PythonSettings.decode = function decode(reader, length, error) {
+                PythonSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PythonSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -35954,15 +37362,15 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
-                                message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.decode(reader, reader.uint32());
+                                message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -35993,16 +37401,20 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                PythonSettings.verify = function verify(message) {
+                PythonSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
                     if (message.experimentalFeatures != null && message.hasOwnProperty("experimentalFeatures")) {
-                        var error = $root.google.api.PythonSettings.ExperimentalFeatures.verify(message.experimentalFeatures);
+                        var error = $root.google.api.PythonSettings.ExperimentalFeatures.verify(message.experimentalFeatures, long + 1);
                         if (error)
                             return "experimentalFeatures." + error;
                     }
@@ -36017,19 +37429,23 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.PythonSettings} PythonSettings
                  */
-                PythonSettings.fromObject = function fromObject(object) {
+                PythonSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.PythonSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.PythonSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.PythonSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.experimentalFeatures != null) {
                         if (typeof object.experimentalFeatures !== "object")
                             throw TypeError(".google.api.PythonSettings.experimentalFeatures: object expected");
-                        message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.fromObject(object.experimentalFeatures);
+                        message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.fromObject(object.experimentalFeatures, long + 1);
                     }
                     return message;
                 };
@@ -36106,7 +37522,7 @@
                     function ExperimentalFeatures(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -36191,9 +37607,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ExperimentalFeatures.decode = function decode(reader, length, error) {
+                    ExperimentalFeatures.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PythonSettings.ExperimentalFeatures();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -36213,7 +37633,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -36244,9 +37664,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ExperimentalFeatures.verify = function verify(message) {
+                    ExperimentalFeatures.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.restAsyncIoEnabled != null && message.hasOwnProperty("restAsyncIoEnabled"))
                             if (typeof message.restAsyncIoEnabled !== "boolean")
                                 return "restAsyncIoEnabled: boolean expected";
@@ -36267,9 +37691,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.api.PythonSettings.ExperimentalFeatures} ExperimentalFeatures
                      */
-                    ExperimentalFeatures.fromObject = function fromObject(object) {
+                    ExperimentalFeatures.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.api.PythonSettings.ExperimentalFeatures)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.api.PythonSettings.ExperimentalFeatures();
                         if (object.restAsyncIoEnabled != null)
                             message.restAsyncIoEnabled = Boolean(object.restAsyncIoEnabled);
@@ -36359,7 +37787,7 @@
                 function NodeSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -36424,9 +37852,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                NodeSettings.decode = function decode(reader, length, error) {
+                NodeSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.NodeSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36434,11 +37866,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -36469,11 +37901,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                NodeSettings.verify = function verify(message) {
+                NodeSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -36488,14 +37924,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.NodeSettings} NodeSettings
                  */
-                NodeSettings.fromObject = function fromObject(object) {
+                NodeSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.NodeSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.NodeSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.NodeSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -36579,7 +38019,7 @@
                     this.handwrittenSignatures = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -36699,9 +38139,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DotnetSettings.decode = function decode(reader, length, error) {
+                DotnetSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.DotnetSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36709,7 +38153,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
@@ -36728,10 +38172,12 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedServices, key);
                                 message.renamedServices[key] = value;
                                 break;
                             }
@@ -36751,10 +38197,12 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedResources, key);
                                 message.renamedResources[key] = value;
                                 break;
                             }
@@ -36777,7 +38225,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -36808,11 +38256,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DotnetSettings.verify = function verify(message) {
+                DotnetSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -36864,28 +38316,38 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.DotnetSettings} DotnetSettings
                  */
-                DotnetSettings.fromObject = function fromObject(object) {
+                DotnetSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.DotnetSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.DotnetSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.DotnetSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.renamedServices) {
                         if (typeof object.renamedServices !== "object")
                             throw TypeError(".google.api.DotnetSettings.renamedServices: object expected");
                         message.renamedServices = {};
-                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedServices, keys[i]);
                             message.renamedServices[keys[i]] = String(object.renamedServices[keys[i]]);
+                        }
                     }
                     if (object.renamedResources) {
                         if (typeof object.renamedResources !== "object")
                             throw TypeError(".google.api.DotnetSettings.renamedResources: object expected");
                         message.renamedResources = {};
-                        for (var keys = Object.keys(object.renamedResources), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedResources), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedResources, keys[i]);
                             message.renamedResources[keys[i]] = String(object.renamedResources[keys[i]]);
+                        }
                     }
                     if (object.ignoredResources) {
                         if (!Array.isArray(object.ignoredResources))
@@ -36940,13 +38402,19 @@
                     var keys2;
                     if (message.renamedServices && (keys2 = Object.keys(message.renamedServices)).length) {
                         object.renamedServices = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedServices, keys2[j]);
                             object.renamedServices[keys2[j]] = message.renamedServices[keys2[j]];
+                        }
                     }
                     if (message.renamedResources && (keys2 = Object.keys(message.renamedResources)).length) {
                         object.renamedResources = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedResources, keys2[j]);
                             object.renamedResources[keys2[j]] = message.renamedResources[keys2[j]];
+                        }
                     }
                     if (message.ignoredResources && message.ignoredResources.length) {
                         object.ignoredResources = [];
@@ -37015,7 +38483,7 @@
                 function RubySettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -37080,9 +38548,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                RubySettings.decode = function decode(reader, length, error) {
+                RubySettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.RubySettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -37090,11 +38562,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -37125,11 +38597,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                RubySettings.verify = function verify(message) {
+                RubySettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -37144,14 +38620,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.RubySettings} RubySettings
                  */
-                RubySettings.fromObject = function fromObject(object) {
+                RubySettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.RubySettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.RubySettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.RubySettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -37227,7 +38707,7 @@
                     this.renamedServices = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -37303,9 +38783,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GoSettings.decode = function decode(reader, length, error) {
+                GoSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.GoSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -37313,7 +38797,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
@@ -37332,15 +38816,17 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedServices, key);
                                 message.renamedServices[key] = value;
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -37371,11 +38857,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GoSettings.verify = function verify(message) {
+                GoSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -37398,21 +38888,28 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.GoSettings} GoSettings
                  */
-                GoSettings.fromObject = function fromObject(object) {
+                GoSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.GoSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.GoSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.GoSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.renamedServices) {
                         if (typeof object.renamedServices !== "object")
                             throw TypeError(".google.api.GoSettings.renamedServices: object expected");
                         message.renamedServices = {};
-                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedServices, keys[i]);
                             message.renamedServices[keys[i]] = String(object.renamedServices[keys[i]]);
+                        }
                     }
                     return message;
                 };
@@ -37439,8 +38936,11 @@
                     var keys2;
                     if (message.renamedServices && (keys2 = Object.keys(message.renamedServices)).length) {
                         object.renamedServices = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedServices, keys2[j]);
                             object.renamedServices[keys2[j]] = message.renamedServices[keys2[j]];
+                        }
                     }
                     return object;
                 };
@@ -37497,7 +38997,7 @@
                     this.autoPopulatedFields = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -37583,9 +39083,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodSettings.decode = function decode(reader, length, error) {
+                MethodSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.MethodSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -37597,7 +39101,7 @@
                                 break;
                             }
                         case 2: {
-                                message.longRunning = $root.google.api.MethodSettings.LongRunning.decode(reader, reader.uint32());
+                                message.longRunning = $root.google.api.MethodSettings.LongRunning.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -37607,7 +39111,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -37638,14 +39142,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodSettings.verify = function verify(message) {
+                MethodSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.selector != null && message.hasOwnProperty("selector"))
                         if (!$util.isString(message.selector))
                             return "selector: string expected";
                     if (message.longRunning != null && message.hasOwnProperty("longRunning")) {
-                        var error = $root.google.api.MethodSettings.LongRunning.verify(message.longRunning);
+                        var error = $root.google.api.MethodSettings.LongRunning.verify(message.longRunning, long + 1);
                         if (error)
                             return "longRunning." + error;
                     }
@@ -37667,16 +39175,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.MethodSettings} MethodSettings
                  */
-                MethodSettings.fromObject = function fromObject(object) {
+                MethodSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.MethodSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.MethodSettings();
                     if (object.selector != null)
                         message.selector = String(object.selector);
                     if (object.longRunning != null) {
                         if (typeof object.longRunning !== "object")
                             throw TypeError(".google.api.MethodSettings.longRunning: object expected");
-                        message.longRunning = $root.google.api.MethodSettings.LongRunning.fromObject(object.longRunning);
+                        message.longRunning = $root.google.api.MethodSettings.LongRunning.fromObject(object.longRunning, long + 1);
                     }
                     if (object.autoPopulatedFields) {
                         if (!Array.isArray(object.autoPopulatedFields))
@@ -37768,7 +39280,7 @@
                     function LongRunning(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -37863,9 +39375,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    LongRunning.decode = function decode(reader, length, error) {
+                    LongRunning.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.MethodSettings.LongRunning();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -37873,7 +39389,7 @@
                                 break;
                             switch (tag >>> 3) {
                             case 1: {
-                                    message.initialPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.initialPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 2: {
@@ -37881,15 +39397,15 @@
                                     break;
                                 }
                             case 3: {
-                                    message.maxPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.maxPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 4: {
-                                    message.totalPollTimeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.totalPollTimeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -37920,11 +39436,15 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    LongRunning.verify = function verify(message) {
+                    LongRunning.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.initialPollDelay != null && message.hasOwnProperty("initialPollDelay")) {
-                            var error = $root.google.protobuf.Duration.verify(message.initialPollDelay);
+                            var error = $root.google.protobuf.Duration.verify(message.initialPollDelay, long + 1);
                             if (error)
                                 return "initialPollDelay." + error;
                         }
@@ -37932,12 +39452,12 @@
                             if (typeof message.pollDelayMultiplier !== "number")
                                 return "pollDelayMultiplier: number expected";
                         if (message.maxPollDelay != null && message.hasOwnProperty("maxPollDelay")) {
-                            var error = $root.google.protobuf.Duration.verify(message.maxPollDelay);
+                            var error = $root.google.protobuf.Duration.verify(message.maxPollDelay, long + 1);
                             if (error)
                                 return "maxPollDelay." + error;
                         }
                         if (message.totalPollTimeout != null && message.hasOwnProperty("totalPollTimeout")) {
-                            var error = $root.google.protobuf.Duration.verify(message.totalPollTimeout);
+                            var error = $root.google.protobuf.Duration.verify(message.totalPollTimeout, long + 1);
                             if (error)
                                 return "totalPollTimeout." + error;
                         }
@@ -37952,26 +39472,30 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.api.MethodSettings.LongRunning} LongRunning
                      */
-                    LongRunning.fromObject = function fromObject(object) {
+                    LongRunning.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.api.MethodSettings.LongRunning)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.api.MethodSettings.LongRunning();
                         if (object.initialPollDelay != null) {
                             if (typeof object.initialPollDelay !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.initialPollDelay: object expected");
-                            message.initialPollDelay = $root.google.protobuf.Duration.fromObject(object.initialPollDelay);
+                            message.initialPollDelay = $root.google.protobuf.Duration.fromObject(object.initialPollDelay, long + 1);
                         }
                         if (object.pollDelayMultiplier != null)
                             message.pollDelayMultiplier = Number(object.pollDelayMultiplier);
                         if (object.maxPollDelay != null) {
                             if (typeof object.maxPollDelay !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.maxPollDelay: object expected");
-                            message.maxPollDelay = $root.google.protobuf.Duration.fromObject(object.maxPollDelay);
+                            message.maxPollDelay = $root.google.protobuf.Duration.fromObject(object.maxPollDelay, long + 1);
                         }
                         if (object.totalPollTimeout != null) {
                             if (typeof object.totalPollTimeout !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.totalPollTimeout: object expected");
-                            message.totalPollTimeout = $root.google.protobuf.Duration.fromObject(object.totalPollTimeout);
+                            message.totalPollTimeout = $root.google.protobuf.Duration.fromObject(object.totalPollTimeout, long + 1);
                         }
                         return message;
                     };
@@ -38102,7 +39626,7 @@
                     this.methods = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38178,9 +39702,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                SelectiveGapicGeneration.decode = function decode(reader, length, error) {
+                SelectiveGapicGeneration.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.SelectiveGapicGeneration();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38198,7 +39726,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38229,9 +39757,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                SelectiveGapicGeneration.verify = function verify(message) {
+                SelectiveGapicGeneration.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.methods != null && message.hasOwnProperty("methods")) {
                         if (!Array.isArray(message.methods))
                             return "methods: array expected";
@@ -38253,9 +39785,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.SelectiveGapicGeneration} SelectiveGapicGeneration
                  */
-                SelectiveGapicGeneration.fromObject = function fromObject(object) {
+                SelectiveGapicGeneration.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.SelectiveGapicGeneration)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.SelectiveGapicGeneration();
                     if (object.methods) {
                         if (!Array.isArray(object.methods))
@@ -38401,7 +39937,7 @@
                     this.referencedTypes = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38477,9 +40013,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldInfo.decode = function decode(reader, length, error) {
+                FieldInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.FieldInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38493,11 +40033,11 @@
                         case 2: {
                                 if (!(message.referencedTypes && message.referencedTypes.length))
                                     message.referencedTypes = [];
-                                message.referencedTypes.push($root.google.api.TypeReference.decode(reader, reader.uint32()));
+                                message.referencedTypes.push($root.google.api.TypeReference.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38528,9 +40068,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldInfo.verify = function verify(message) {
+                FieldInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.format != null && message.hasOwnProperty("format"))
                         switch (message.format) {
                         default:
@@ -38546,7 +40090,7 @@
                         if (!Array.isArray(message.referencedTypes))
                             return "referencedTypes: array expected";
                         for (var i = 0; i < message.referencedTypes.length; ++i) {
-                            var error = $root.google.api.TypeReference.verify(message.referencedTypes[i]);
+                            var error = $root.google.api.TypeReference.verify(message.referencedTypes[i], long + 1);
                             if (error)
                                 return "referencedTypes." + error;
                         }
@@ -38562,9 +40106,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.FieldInfo} FieldInfo
                  */
-                FieldInfo.fromObject = function fromObject(object) {
+                FieldInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.FieldInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.FieldInfo();
                     switch (object.format) {
                     default:
@@ -38601,7 +40149,7 @@
                         for (var i = 0; i < object.referencedTypes.length; ++i) {
                             if (typeof object.referencedTypes[i] !== "object")
                                 throw TypeError(".google.api.FieldInfo.referencedTypes: object expected");
-                            message.referencedTypes[i] = $root.google.api.TypeReference.fromObject(object.referencedTypes[i]);
+                            message.referencedTypes[i] = $root.google.api.TypeReference.fromObject(object.referencedTypes[i], long + 1);
                         }
                     }
                     return message;
@@ -38703,7 +40251,7 @@
                 function TypeReference(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38768,9 +40316,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                TypeReference.decode = function decode(reader, length, error) {
+                TypeReference.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.TypeReference();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38782,7 +40334,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38813,9 +40365,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                TypeReference.verify = function verify(message) {
+                TypeReference.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.typeName != null && message.hasOwnProperty("typeName"))
                         if (!$util.isString(message.typeName))
                             return "typeName: string expected";
@@ -38830,9 +40386,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.TypeReference} TypeReference
                  */
-                TypeReference.fromObject = function fromObject(object) {
+                TypeReference.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.TypeReference)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.TypeReference();
                     if (object.typeName != null)
                         message.typeName = String(object.typeName);
@@ -38916,7 +40476,7 @@
                     this.style = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39046,9 +40606,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ResourceDescriptor.decode = function decode(reader, length, error) {
+                ResourceDescriptor.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceDescriptor();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39093,7 +40657,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39124,9 +40688,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ResourceDescriptor.verify = function verify(message) {
+                ResourceDescriptor.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type != null && message.hasOwnProperty("type"))
                         if (!$util.isString(message.type))
                             return "type: string expected";
@@ -39178,9 +40746,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ResourceDescriptor} ResourceDescriptor
                  */
-                ResourceDescriptor.fromObject = function fromObject(object) {
+                ResourceDescriptor.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ResourceDescriptor)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ResourceDescriptor();
                     if (object.type != null)
                         message.type = String(object.type);
@@ -39368,7 +40940,7 @@
                 function ResourceReference(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39443,9 +41015,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ResourceReference.decode = function decode(reader, length, error) {
+                ResourceReference.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceReference();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39461,7 +41037,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39492,9 +41068,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ResourceReference.verify = function verify(message) {
+                ResourceReference.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type != null && message.hasOwnProperty("type"))
                         if (!$util.isString(message.type))
                             return "type: string expected";
@@ -39512,9 +41092,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ResourceReference} ResourceReference
                  */
-                ResourceReference.fromObject = function fromObject(object) {
+                ResourceReference.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ResourceReference)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ResourceReference();
                     if (object.type != null)
                         message.type = String(object.type);
@@ -39609,7 +41193,7 @@
                     this.file = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39675,9 +41259,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileDescriptorSet.decode = function decode(reader, length, error) {
+                FileDescriptorSet.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorSet();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39687,11 +41275,11 @@
                         case 1: {
                                 if (!(message.file && message.file.length))
                                     message.file = [];
-                                message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32()));
+                                message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39722,14 +41310,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileDescriptorSet.verify = function verify(message) {
+                FileDescriptorSet.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.file != null && message.hasOwnProperty("file")) {
                         if (!Array.isArray(message.file))
                             return "file: array expected";
                         for (var i = 0; i < message.file.length; ++i) {
-                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i]);
+                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i], long + 1);
                             if (error)
                                 return "file." + error;
                         }
@@ -39745,9 +41337,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet
                  */
-                FileDescriptorSet.fromObject = function fromObject(object) {
+                FileDescriptorSet.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileDescriptorSet)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileDescriptorSet();
                     if (object.file) {
                         if (!Array.isArray(object.file))
@@ -39756,7 +41352,7 @@
                         for (var i = 0; i < object.file.length; ++i) {
                             if (typeof object.file[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorSet.file: object expected");
-                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i]);
+                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i], long + 1);
                         }
                     }
                     return message;
@@ -39889,7 +41485,7 @@
                     this.extension = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -40092,9 +41688,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileDescriptorProto.decode = function decode(reader, length, error) {
+                FileDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -40146,33 +41746,33 @@
                         case 4: {
                                 if (!(message.messageType && message.messageType.length))
                                     message.messageType = [];
-                                message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
+                                message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
                                 if (!(message.enumType && message.enumType.length))
                                     message.enumType = [];
-                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
+                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 6: {
                                 if (!(message.service && message.service.length))
                                     message.service = [];
-                                message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32()));
+                                message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 7: {
                                 if (!(message.extension && message.extension.length))
                                     message.extension = [];
-                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 8: {
-                                message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 9: {
-                                message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32());
+                                message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 12: {
@@ -40184,7 +41784,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -40215,9 +41815,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileDescriptorProto.verify = function verify(message) {
+                FileDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -40256,7 +41860,7 @@
                         if (!Array.isArray(message.messageType))
                             return "messageType: array expected";
                         for (var i = 0; i < message.messageType.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i]);
+                            var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i], long + 1);
                             if (error)
                                 return "messageType." + error;
                         }
@@ -40265,7 +41869,7 @@
                         if (!Array.isArray(message.enumType))
                             return "enumType: array expected";
                         for (var i = 0; i < message.enumType.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i], long + 1);
                             if (error)
                                 return "enumType." + error;
                         }
@@ -40274,7 +41878,7 @@
                         if (!Array.isArray(message.service))
                             return "service: array expected";
                         for (var i = 0; i < message.service.length; ++i) {
-                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i]);
+                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i], long + 1);
                             if (error)
                                 return "service." + error;
                         }
@@ -40283,18 +41887,18 @@
                         if (!Array.isArray(message.extension))
                             return "extension: array expected";
                         for (var i = 0; i < message.extension.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i], long + 1);
                             if (error)
                                 return "extension." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.FileOptions.verify(message.options);
+                        var error = $root.google.protobuf.FileOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
                     if (message.sourceCodeInfo != null && message.hasOwnProperty("sourceCodeInfo")) {
-                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo);
+                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo, long + 1);
                         if (error)
                             return "sourceCodeInfo." + error;
                     }
@@ -40330,9 +41934,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto
                  */
-                FileDescriptorProto.fromObject = function fromObject(object) {
+                FileDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -40373,7 +41981,7 @@
                         for (var i = 0; i < object.messageType.length; ++i) {
                             if (typeof object.messageType[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.messageType: object expected");
-                            message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i]);
+                            message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i], long + 1);
                         }
                     }
                     if (object.enumType) {
@@ -40383,7 +41991,7 @@
                         for (var i = 0; i < object.enumType.length; ++i) {
                             if (typeof object.enumType[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.enumType: object expected");
-                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]);
+                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i], long + 1);
                         }
                     }
                     if (object.service) {
@@ -40393,7 +42001,7 @@
                         for (var i = 0; i < object.service.length; ++i) {
                             if (typeof object.service[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.service: object expected");
-                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i]);
+                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i], long + 1);
                         }
                     }
                     if (object.extension) {
@@ -40403,18 +42011,18 @@
                         for (var i = 0; i < object.extension.length; ++i) {
                             if (typeof object.extension[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.extension: object expected");
-                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
+                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.FileDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options, long + 1);
                     }
                     if (object.sourceCodeInfo != null) {
                         if (typeof object.sourceCodeInfo !== "object")
                             throw TypeError(".google.protobuf.FileDescriptorProto.sourceCodeInfo: object expected");
-                        message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo);
+                        message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo, long + 1);
                     }
                     if (object.syntax != null)
                         message.syntax = String(object.syntax);
@@ -40630,7 +42238,7 @@
                     this.reservedName = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -40803,9 +42411,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DescriptorProto.decode = function decode(reader, length, error) {
+                DescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -40819,47 +42431,47 @@
                         case 2: {
                                 if (!(message.field && message.field.length))
                                     message.field = [];
-                                message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 6: {
                                 if (!(message.extension && message.extension.length))
                                     message.extension = [];
-                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
                                 if (!(message.nestedType && message.nestedType.length))
                                     message.nestedType = [];
-                                message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
+                                message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 4: {
                                 if (!(message.enumType && message.enumType.length))
                                     message.enumType = [];
-                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
+                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
                                 if (!(message.extensionRange && message.extensionRange.length))
                                     message.extensionRange = [];
-                                message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32()));
+                                message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 8: {
                                 if (!(message.oneofDecl && message.oneofDecl.length))
                                     message.oneofDecl = [];
-                                message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32()));
+                                message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 7: {
-                                message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 9: {
                                 if (!(message.reservedRange && message.reservedRange.length))
                                     message.reservedRange = [];
-                                message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32()));
+                                message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 10: {
@@ -40873,7 +42485,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -40904,9 +42516,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DescriptorProto.verify = function verify(message) {
+                DescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -40914,7 +42530,7 @@
                         if (!Array.isArray(message.field))
                             return "field: array expected";
                         for (var i = 0; i < message.field.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i], long + 1);
                             if (error)
                                 return "field." + error;
                         }
@@ -40923,7 +42539,7 @@
                         if (!Array.isArray(message.extension))
                             return "extension: array expected";
                         for (var i = 0; i < message.extension.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i], long + 1);
                             if (error)
                                 return "extension." + error;
                         }
@@ -40932,7 +42548,7 @@
                         if (!Array.isArray(message.nestedType))
                             return "nestedType: array expected";
                         for (var i = 0; i < message.nestedType.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i]);
+                            var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i], long + 1);
                             if (error)
                                 return "nestedType." + error;
                         }
@@ -40941,7 +42557,7 @@
                         if (!Array.isArray(message.enumType))
                             return "enumType: array expected";
                         for (var i = 0; i < message.enumType.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i], long + 1);
                             if (error)
                                 return "enumType." + error;
                         }
@@ -40950,7 +42566,7 @@
                         if (!Array.isArray(message.extensionRange))
                             return "extensionRange: array expected";
                         for (var i = 0; i < message.extensionRange.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i]);
+                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i], long + 1);
                             if (error)
                                 return "extensionRange." + error;
                         }
@@ -40959,13 +42575,13 @@
                         if (!Array.isArray(message.oneofDecl))
                             return "oneofDecl: array expected";
                         for (var i = 0; i < message.oneofDecl.length; ++i) {
-                            var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i]);
+                            var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i], long + 1);
                             if (error)
                                 return "oneofDecl." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.MessageOptions.verify(message.options);
+                        var error = $root.google.protobuf.MessageOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -40973,7 +42589,7 @@
                         if (!Array.isArray(message.reservedRange))
                             return "reservedRange: array expected";
                         for (var i = 0; i < message.reservedRange.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i]);
+                            var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i], long + 1);
                             if (error)
                                 return "reservedRange." + error;
                         }
@@ -41005,9 +42621,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.DescriptorProto} DescriptorProto
                  */
-                DescriptorProto.fromObject = function fromObject(object) {
+                DescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.DescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.DescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -41018,7 +42638,7 @@
                         for (var i = 0; i < object.field.length; ++i) {
                             if (typeof object.field[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.field: object expected");
-                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i]);
+                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i], long + 1);
                         }
                     }
                     if (object.extension) {
@@ -41028,7 +42648,7 @@
                         for (var i = 0; i < object.extension.length; ++i) {
                             if (typeof object.extension[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.extension: object expected");
-                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
+                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i], long + 1);
                         }
                     }
                     if (object.nestedType) {
@@ -41038,7 +42658,7 @@
                         for (var i = 0; i < object.nestedType.length; ++i) {
                             if (typeof object.nestedType[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.nestedType: object expected");
-                            message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i]);
+                            message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i], long + 1);
                         }
                     }
                     if (object.enumType) {
@@ -41048,7 +42668,7 @@
                         for (var i = 0; i < object.enumType.length; ++i) {
                             if (typeof object.enumType[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.enumType: object expected");
-                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]);
+                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i], long + 1);
                         }
                     }
                     if (object.extensionRange) {
@@ -41058,7 +42678,7 @@
                         for (var i = 0; i < object.extensionRange.length; ++i) {
                             if (typeof object.extensionRange[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.extensionRange: object expected");
-                            message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i]);
+                            message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i], long + 1);
                         }
                     }
                     if (object.oneofDecl) {
@@ -41068,13 +42688,13 @@
                         for (var i = 0; i < object.oneofDecl.length; ++i) {
                             if (typeof object.oneofDecl[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.oneofDecl: object expected");
-                            message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i]);
+                            message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.DescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options, long + 1);
                     }
                     if (object.reservedRange) {
                         if (!Array.isArray(object.reservedRange))
@@ -41083,7 +42703,7 @@
                         for (var i = 0; i < object.reservedRange.length; ++i) {
                             if (typeof object.reservedRange[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.reservedRange: object expected");
-                            message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i]);
+                            message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i], long + 1);
                         }
                     }
                     if (object.reservedName) {
@@ -41241,7 +42861,7 @@
                     function ExtensionRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -41326,9 +42946,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ExtensionRange.decode = function decode(reader, length, error) {
+                    ExtensionRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -41344,11 +42968,11 @@
                                     break;
                                 }
                             case 3: {
-                                    message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32());
+                                    message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -41379,9 +43003,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ExtensionRange.verify = function verify(message) {
+                    ExtensionRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -41389,7 +43017,7 @@
                             if (!$util.isInteger(message.end))
                                 return "end: integer expected";
                         if (message.options != null && message.hasOwnProperty("options")) {
-                            var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options);
+                            var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options, long + 1);
                             if (error)
                                 return "options." + error;
                         }
@@ -41404,9 +43032,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange
                      */
-                    ExtensionRange.fromObject = function fromObject(object) {
+                    ExtensionRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.DescriptorProto.ExtensionRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -41415,7 +43047,7 @@
                         if (object.options != null) {
                             if (typeof object.options !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.ExtensionRange.options: object expected");
-                            message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options);
+                            message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options, long + 1);
                         }
                         return message;
                     };
@@ -41497,7 +43129,7 @@
                     function ReservedRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -41572,9 +43204,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ReservedRange.decode = function decode(reader, length, error) {
+                    ReservedRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ReservedRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -41590,7 +43226,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -41621,9 +43257,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ReservedRange.verify = function verify(message) {
+                    ReservedRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -41641,9 +43281,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange
                      */
-                    ReservedRange.fromObject = function fromObject(object) {
+                    ReservedRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.DescriptorProto.ReservedRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.DescriptorProto.ReservedRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -41733,7 +43377,7 @@
                     this.declaration = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -41830,9 +43474,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ExtensionRangeOptions.decode = function decode(reader, length, error) {
+                ExtensionRangeOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -41842,17 +43490,17 @@
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
                                 if (!(message.declaration && message.declaration.length))
                                     message.declaration = [];
-                                message.declaration.push($root.google.protobuf.ExtensionRangeOptions.Declaration.decode(reader, reader.uint32()));
+                                message.declaration.push($root.google.protobuf.ExtensionRangeOptions.Declaration.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 50: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -41860,7 +43508,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -41891,14 +43539,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ExtensionRangeOptions.verify = function verify(message) {
+                ExtensionRangeOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) {
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -41907,13 +43559,13 @@
                         if (!Array.isArray(message.declaration))
                             return "declaration: array expected";
                         for (var i = 0; i < message.declaration.length; ++i) {
-                            var error = $root.google.protobuf.ExtensionRangeOptions.Declaration.verify(message.declaration[i]);
+                            var error = $root.google.protobuf.ExtensionRangeOptions.Declaration.verify(message.declaration[i], long + 1);
                             if (error)
                                 return "declaration." + error;
                         }
                     }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -41936,9 +43588,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions
                  */
-                ExtensionRangeOptions.fromObject = function fromObject(object) {
+                ExtensionRangeOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ExtensionRangeOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ExtensionRangeOptions();
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -41947,7 +43603,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.ExtensionRangeOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object.declaration) {
@@ -41957,13 +43613,13 @@
                         for (var i = 0; i < object.declaration.length; ++i) {
                             if (typeof object.declaration[i] !== "object")
                                 throw TypeError(".google.protobuf.ExtensionRangeOptions.declaration: object expected");
-                            message.declaration[i] = $root.google.protobuf.ExtensionRangeOptions.Declaration.fromObject(object.declaration[i]);
+                            message.declaration[i] = $root.google.protobuf.ExtensionRangeOptions.Declaration.fromObject(object.declaration[i], long + 1);
                         }
                     }
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.ExtensionRangeOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     switch (object.verification) {
                     case "DECLARATION":
@@ -42072,7 +43728,7 @@
                     function Declaration(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -42177,9 +43833,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Declaration.decode = function decode(reader, length, error) {
+                    Declaration.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions.Declaration();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -42207,7 +43867,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -42238,9 +43898,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Declaration.verify = function verify(message) {
+                    Declaration.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.number != null && message.hasOwnProperty("number"))
                             if (!$util.isInteger(message.number))
                                 return "number: integer expected";
@@ -42267,9 +43931,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.ExtensionRangeOptions.Declaration} Declaration
                      */
-                    Declaration.fromObject = function fromObject(object) {
+                    Declaration.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.ExtensionRangeOptions.Declaration)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.ExtensionRangeOptions.Declaration();
                         if (object.number != null)
                             message.number = object.number | 0;
@@ -42393,7 +44061,7 @@
                 function FieldDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -42558,9 +44226,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldDescriptorProto.decode = function decode(reader, length, error) {
+                FieldDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -42604,7 +44276,7 @@
                                 break;
                             }
                         case 8: {
-                                message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 17: {
@@ -42612,7 +44284,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -42643,9 +44315,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldDescriptorProto.verify = function verify(message) {
+                FieldDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -42701,7 +44377,7 @@
                         if (!$util.isString(message.jsonName))
                             return "jsonName: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.FieldOptions.verify(message.options);
+                        var error = $root.google.protobuf.FieldOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -42719,9 +44395,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto
                  */
-                FieldDescriptorProto.fromObject = function fromObject(object) {
+                FieldDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -42840,7 +44520,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.FieldDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options, long + 1);
                     }
                     if (object.proto3Optional != null)
                         message.proto3Optional = Boolean(object.proto3Optional);
@@ -43010,7 +44690,7 @@
                 function OneofDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -43085,9 +44765,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OneofDescriptorProto.decode = function decode(reader, length, error) {
+                OneofDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -43099,11 +44783,11 @@
                                 break;
                             }
                         case 2: {
-                                message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -43134,14 +44818,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OneofDescriptorProto.verify = function verify(message) {
+                OneofDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.OneofOptions.verify(message.options);
+                        var error = $root.google.protobuf.OneofOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -43156,16 +44844,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto
                  */
-                OneofDescriptorProto.fromObject = function fromObject(object) {
+                OneofDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.OneofDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.OneofDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.OneofDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.OneofOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.OneofOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -43251,7 +44943,7 @@
                     this.reservedName = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -43369,9 +45061,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumDescriptorProto.decode = function decode(reader, length, error) {
+                EnumDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -43385,17 +45081,17 @@
                         case 2: {
                                 if (!(message.value && message.value.length))
                                     message.value = [];
-                                message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32()));
+                                message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 4: {
                                 if (!(message.reservedRange && message.reservedRange.length))
                                     message.reservedRange = [];
-                                message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32()));
+                                message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
@@ -43409,7 +45105,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -43440,9 +45136,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumDescriptorProto.verify = function verify(message) {
+                EnumDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -43450,13 +45150,13 @@
                         if (!Array.isArray(message.value))
                             return "value: array expected";
                         for (var i = 0; i < message.value.length; ++i) {
-                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i]);
+                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i], long + 1);
                             if (error)
                                 return "value." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.EnumOptions.verify(message.options);
+                        var error = $root.google.protobuf.EnumOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -43464,7 +45164,7 @@
                         if (!Array.isArray(message.reservedRange))
                             return "reservedRange: array expected";
                         for (var i = 0; i < message.reservedRange.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i], long + 1);
                             if (error)
                                 return "reservedRange." + error;
                         }
@@ -43496,9 +45196,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto
                  */
-                EnumDescriptorProto.fromObject = function fromObject(object) {
+                EnumDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -43509,13 +45213,13 @@
                         for (var i = 0; i < object.value.length; ++i) {
                             if (typeof object.value[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumDescriptorProto.value: object expected");
-                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i]);
+                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.EnumDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options, long + 1);
                     }
                     if (object.reservedRange) {
                         if (!Array.isArray(object.reservedRange))
@@ -43524,7 +45228,7 @@
                         for (var i = 0; i < object.reservedRange.length; ++i) {
                             if (typeof object.reservedRange[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumDescriptorProto.reservedRange: object expected");
-                            message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i]);
+                            message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i], long + 1);
                         }
                     }
                     if (object.reservedName) {
@@ -43651,7 +45355,7 @@
                     function EnumReservedRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -43726,9 +45430,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    EnumReservedRange.decode = function decode(reader, length, error) {
+                    EnumReservedRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -43744,7 +45452,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -43775,9 +45483,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    EnumReservedRange.verify = function verify(message) {
+                    EnumReservedRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -43795,9 +45507,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange
                      */
-                    EnumReservedRange.fromObject = function fromObject(object) {
+                    EnumReservedRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.EnumDescriptorProto.EnumReservedRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -43884,7 +45600,7 @@
                 function EnumValueDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -43969,9 +45685,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumValueDescriptorProto.decode = function decode(reader, length, error) {
+                EnumValueDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -43987,11 +45707,11 @@
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -44022,9 +45742,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumValueDescriptorProto.verify = function verify(message) {
+                EnumValueDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -44032,7 +45756,7 @@
                         if (!$util.isInteger(message.number))
                             return "number: integer expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options);
+                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -44047,9 +45771,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto
                  */
-                EnumValueDescriptorProto.fromObject = function fromObject(object) {
+                EnumValueDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumValueDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumValueDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -44058,7 +45786,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.EnumValueDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -44142,7 +45870,7 @@
                     this.method = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -44228,9 +45956,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ServiceDescriptorProto.decode = function decode(reader, length, error) {
+                ServiceDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -44244,15 +45976,15 @@
                         case 2: {
                                 if (!(message.method && message.method.length))
                                     message.method = [];
-                                message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32()));
+                                message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -44283,9 +46015,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ServiceDescriptorProto.verify = function verify(message) {
+                ServiceDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -44293,13 +46029,13 @@
                         if (!Array.isArray(message.method))
                             return "method: array expected";
                         for (var i = 0; i < message.method.length; ++i) {
-                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i]);
+                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i], long + 1);
                             if (error)
                                 return "method." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.ServiceOptions.verify(message.options);
+                        var error = $root.google.protobuf.ServiceOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -44314,9 +46050,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto
                  */
-                ServiceDescriptorProto.fromObject = function fromObject(object) {
+                ServiceDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ServiceDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ServiceDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -44327,13 +46067,13 @@
                         for (var i = 0; i < object.method.length; ++i) {
                             if (typeof object.method[i] !== "object")
                                 throw TypeError(".google.protobuf.ServiceDescriptorProto.method: object expected");
-                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i]);
+                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.ServiceDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -44423,7 +46163,7 @@
                 function MethodDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -44538,9 +46278,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodDescriptorProto.decode = function decode(reader, length, error) {
+                MethodDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -44560,7 +46304,7 @@
                                 break;
                             }
                         case 4: {
-                                message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 5: {
@@ -44572,7 +46316,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -44603,9 +46347,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodDescriptorProto.verify = function verify(message) {
+                MethodDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -44616,7 +46364,7 @@
                         if (!$util.isString(message.outputType))
                             return "outputType: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.MethodOptions.verify(message.options);
+                        var error = $root.google.protobuf.MethodOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -44637,9 +46385,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto
                  */
-                MethodDescriptorProto.fromObject = function fromObject(object) {
+                MethodDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MethodDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MethodDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -44650,7 +46402,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.MethodDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options, long + 1);
                     }
                     if (object.clientStreaming != null)
                         message.clientStreaming = Boolean(object.clientStreaming);
@@ -44767,7 +46519,7 @@
                     this[".google.api.resourceDefinition"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -45044,9 +46796,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileOptions.decode = function decode(reader, length, error) {
+                FileOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -45130,23 +46886,23 @@
                                 break;
                             }
                         case 50: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1053: {
                                 if (!(message[".google.api.resourceDefinition"] && message[".google.api.resourceDefinition"].length))
                                     message[".google.api.resourceDefinition"] = [];
-                                message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32()));
+                                message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -45177,9 +46933,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileOptions.verify = function verify(message) {
+                FileOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.javaPackage != null && message.hasOwnProperty("javaPackage"))
                         if (!$util.isString(message.javaPackage))
                             return "javaPackage: string expected";
@@ -45244,7 +47004,7 @@
                         if (!$util.isString(message.rubyPackage))
                             return "rubyPackage: string expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -45252,7 +47012,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -45261,7 +47021,7 @@
                         if (!Array.isArray(message[".google.api.resourceDefinition"]))
                             return ".google.api.resourceDefinition: array expected";
                         for (var i = 0; i < message[".google.api.resourceDefinition"].length; ++i) {
-                            var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i]);
+                            var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i], long + 1);
                             if (error)
                                 return ".google.api.resourceDefinition." + error;
                         }
@@ -45277,9 +47037,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileOptions} FileOptions
                  */
-                FileOptions.fromObject = function fromObject(object) {
+                FileOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileOptions();
                     if (object.javaPackage != null)
                         message.javaPackage = String(object.javaPackage);
@@ -45340,7 +47104,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.FileOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -45349,7 +47113,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.FileOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.resourceDefinition"]) {
@@ -45359,7 +47123,7 @@
                         for (var i = 0; i < object[".google.api.resourceDefinition"].length; ++i) {
                             if (typeof object[".google.api.resourceDefinition"][i] !== "object")
                                 throw TypeError(".google.protobuf.FileOptions..google.api.resourceDefinition: object expected");
-                            message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i]);
+                            message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i], long + 1);
                         }
                     }
                     return message;
@@ -45530,7 +47294,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -45666,9 +47430,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MessageOptions.decode = function decode(reader, length, error) {
+                MessageOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MessageOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -45696,21 +47464,21 @@
                                 break;
                             }
                         case 12: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1053: {
-                                message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32());
+                                message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -45741,9 +47509,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MessageOptions.verify = function verify(message) {
+                MessageOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.messageSetWireFormat != null && message.hasOwnProperty("messageSetWireFormat"))
                         if (typeof message.messageSetWireFormat !== "boolean")
                             return "messageSetWireFormat: boolean expected";
@@ -45760,7 +47532,7 @@
                         if (typeof message.deprecatedLegacyJsonFieldConflicts !== "boolean")
                             return "deprecatedLegacyJsonFieldConflicts: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -45768,13 +47540,13 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
                     }
                     if (message[".google.api.resource"] != null && message.hasOwnProperty(".google.api.resource")) {
-                        var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"]);
+                        var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"], long + 1);
                         if (error)
                             return ".google.api.resource." + error;
                     }
@@ -45789,9 +47561,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MessageOptions} MessageOptions
                  */
-                MessageOptions.fromObject = function fromObject(object) {
+                MessageOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MessageOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MessageOptions();
                     if (object.messageSetWireFormat != null)
                         message.messageSetWireFormat = Boolean(object.messageSetWireFormat);
@@ -45806,7 +47582,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.MessageOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -45815,13 +47591,13 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.MessageOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.resource"] != null) {
                         if (typeof object[".google.api.resource"] !== "object")
                             throw TypeError(".google.protobuf.MessageOptions..google.api.resource: object expected");
-                        message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"]);
+                        message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"], long + 1);
                     }
                     return message;
                 };
@@ -45941,7 +47717,7 @@
                     this[".google.api.fieldBehavior"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -46170,9 +47946,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldOptions.decode = function decode(reader, length, error) {
+                FieldOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -46229,21 +48009,21 @@
                         case 20: {
                                 if (!(message.editionDefaults && message.editionDefaults.length))
                                     message.editionDefaults = [];
-                                message.editionDefaults.push($root.google.protobuf.FieldOptions.EditionDefault.decode(reader, reader.uint32()));
+                                message.editionDefaults.push($root.google.protobuf.FieldOptions.EditionDefault.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 21: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 22: {
-                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32());
+                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1052: {
@@ -46258,15 +48038,15 @@
                                 break;
                             }
                         case 291403980: {
-                                message[".google.api.fieldInfo"] = $root.google.api.FieldInfo.decode(reader, reader.uint32());
+                                message[".google.api.fieldInfo"] = $root.google.api.FieldInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 1055: {
-                                message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32());
+                                message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -46297,9 +48077,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldOptions.verify = function verify(message) {
+                FieldOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.ctype != null && message.hasOwnProperty("ctype"))
                         switch (message.ctype) {
                         default:
@@ -46369,18 +48153,18 @@
                         if (!Array.isArray(message.editionDefaults))
                             return "editionDefaults: array expected";
                         for (var i = 0; i < message.editionDefaults.length; ++i) {
-                            var error = $root.google.protobuf.FieldOptions.EditionDefault.verify(message.editionDefaults[i]);
+                            var error = $root.google.protobuf.FieldOptions.EditionDefault.verify(message.editionDefaults[i], long + 1);
                             if (error)
                                 return "editionDefaults." + error;
                         }
                     }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
                     if (message.featureSupport != null && message.hasOwnProperty("featureSupport")) {
-                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport);
+                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport, long + 1);
                         if (error)
                             return "featureSupport." + error;
                     }
@@ -46388,7 +48172,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -46413,12 +48197,12 @@
                             }
                     }
                     if (message[".google.api.fieldInfo"] != null && message.hasOwnProperty(".google.api.fieldInfo")) {
-                        var error = $root.google.api.FieldInfo.verify(message[".google.api.fieldInfo"]);
+                        var error = $root.google.api.FieldInfo.verify(message[".google.api.fieldInfo"], long + 1);
                         if (error)
                             return ".google.api.fieldInfo." + error;
                     }
                     if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) {
-                        var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"]);
+                        var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"], long + 1);
                         if (error)
                             return ".google.api.resourceReference." + error;
                     }
@@ -46433,9 +48217,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldOptions} FieldOptions
                  */
-                FieldOptions.fromObject = function fromObject(object) {
+                FieldOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldOptions();
                     switch (object.ctype) {
                     default:
@@ -46569,18 +48357,18 @@
                         for (var i = 0; i < object.editionDefaults.length; ++i) {
                             if (typeof object.editionDefaults[i] !== "object")
                                 throw TypeError(".google.protobuf.FieldOptions.editionDefaults: object expected");
-                            message.editionDefaults[i] = $root.google.protobuf.FieldOptions.EditionDefault.fromObject(object.editionDefaults[i]);
+                            message.editionDefaults[i] = $root.google.protobuf.FieldOptions.EditionDefault.fromObject(object.editionDefaults[i], long + 1);
                         }
                     }
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.FieldOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.featureSupport != null) {
                         if (typeof object.featureSupport !== "object")
                             throw TypeError(".google.protobuf.FieldOptions.featureSupport: object expected");
-                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport);
+                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -46589,7 +48377,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.FieldOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.fieldBehavior"]) {
@@ -46644,12 +48432,12 @@
                     if (object[".google.api.fieldInfo"] != null) {
                         if (typeof object[".google.api.fieldInfo"] !== "object")
                             throw TypeError(".google.protobuf.FieldOptions..google.api.fieldInfo: object expected");
-                        message[".google.api.fieldInfo"] = $root.google.api.FieldInfo.fromObject(object[".google.api.fieldInfo"]);
+                        message[".google.api.fieldInfo"] = $root.google.api.FieldInfo.fromObject(object[".google.api.fieldInfo"], long + 1);
                     }
                     if (object[".google.api.resourceReference"] != null) {
                         if (typeof object[".google.api.resourceReference"] !== "object")
                             throw TypeError(".google.protobuf.FieldOptions..google.api.resourceReference: object expected");
-                        message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"]);
+                        message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"], long + 1);
                     }
                     return message;
                 };
@@ -46862,7 +48650,7 @@
                     function EditionDefault(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -46937,9 +48725,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    EditionDefault.decode = function decode(reader, length, error) {
+                    EditionDefault.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions.EditionDefault();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -46955,7 +48747,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -46986,9 +48778,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    EditionDefault.verify = function verify(message) {
+                    EditionDefault.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.edition != null && message.hasOwnProperty("edition"))
                             switch (message.edition) {
                             default:
@@ -47021,9 +48817,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FieldOptions.EditionDefault} EditionDefault
                      */
-                    EditionDefault.fromObject = function fromObject(object) {
+                    EditionDefault.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FieldOptions.EditionDefault)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FieldOptions.EditionDefault();
                         switch (object.edition) {
                         default:
@@ -47162,7 +48962,7 @@
                     function FeatureSupport(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -47257,9 +49057,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    FeatureSupport.decode = function decode(reader, length, error) {
+                    FeatureSupport.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions.FeatureSupport();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -47283,7 +49087,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -47314,9 +49118,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    FeatureSupport.verify = function verify(message) {
+                    FeatureSupport.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.editionIntroduced != null && message.hasOwnProperty("editionIntroduced"))
                             switch (message.editionIntroduced) {
                             default:
@@ -47385,9 +49193,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FieldOptions.FeatureSupport} FeatureSupport
                      */
-                    FeatureSupport.fromObject = function fromObject(object) {
+                    FeatureSupport.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FieldOptions.FeatureSupport)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FieldOptions.FeatureSupport();
                         switch (object.editionIntroduced) {
                         default:
@@ -47646,7 +49458,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -47722,9 +49534,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OneofOptions.decode = function decode(reader, length, error) {
+                OneofOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -47732,17 +49548,17 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -47773,11 +49589,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OneofOptions.verify = function verify(message) {
+                OneofOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -47785,7 +49605,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -47801,14 +49621,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.OneofOptions} OneofOptions
                  */
-                OneofOptions.fromObject = function fromObject(object) {
+                OneofOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.OneofOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.OneofOptions();
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.OneofOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -47817,7 +49641,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.OneofOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -47904,7 +49728,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -48010,9 +49834,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumOptions.decode = function decode(reader, length, error) {
+                EnumOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -48032,17 +49860,17 @@
                                 break;
                             }
                         case 7: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -48073,9 +49901,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumOptions.verify = function verify(message) {
+                EnumOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.allowAlias != null && message.hasOwnProperty("allowAlias"))
                         if (typeof message.allowAlias !== "boolean")
                             return "allowAlias: boolean expected";
@@ -48086,7 +49918,7 @@
                         if (typeof message.deprecatedLegacyJsonFieldConflicts !== "boolean")
                             return "deprecatedLegacyJsonFieldConflicts: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -48094,7 +49926,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -48110,9 +49942,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumOptions} EnumOptions
                  */
-                EnumOptions.fromObject = function fromObject(object) {
+                EnumOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumOptions();
                     if (object.allowAlias != null)
                         message.allowAlias = Boolean(object.allowAlias);
@@ -48123,7 +49959,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.EnumOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -48132,7 +49968,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -48229,7 +50065,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -48335,9 +50171,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumValueOptions.decode = function decode(reader, length, error) {
+                EnumValueOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -48349,7 +50189,7 @@
                                 break;
                             }
                         case 2: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -48357,17 +50197,17 @@
                                 break;
                             }
                         case 4: {
-                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32());
+                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -48398,14 +50238,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumValueOptions.verify = function verify(message) {
+                EnumValueOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                         if (typeof message.deprecated !== "boolean")
                             return "deprecated: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -48413,7 +50257,7 @@
                         if (typeof message.debugRedact !== "boolean")
                             return "debugRedact: boolean expected";
                     if (message.featureSupport != null && message.hasOwnProperty("featureSupport")) {
-                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport);
+                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport, long + 1);
                         if (error)
                             return "featureSupport." + error;
                     }
@@ -48421,7 +50265,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -48437,23 +50281,27 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumValueOptions} EnumValueOptions
                  */
-                EnumValueOptions.fromObject = function fromObject(object) {
+                EnumValueOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumValueOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumValueOptions();
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.EnumValueOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.debugRedact != null)
                         message.debugRedact = Boolean(object.debugRedact);
                     if (object.featureSupport != null) {
                         if (typeof object.featureSupport !== "object")
                             throw TypeError(".google.protobuf.EnumValueOptions.featureSupport: object expected");
-                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport);
+                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -48462,7 +50310,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumValueOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -48560,7 +50408,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -48676,9 +50524,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ServiceOptions.decode = function decode(reader, length, error) {
+                ServiceOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -48686,7 +50538,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 34: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 33: {
@@ -48696,7 +50548,7 @@
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1049: {
@@ -48712,7 +50564,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -48743,11 +50595,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ServiceOptions.verify = function verify(message) {
+                ServiceOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -48758,7 +50614,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -48783,14 +50639,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ServiceOptions} ServiceOptions
                  */
-                ServiceOptions.fromObject = function fromObject(object) {
+                ServiceOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ServiceOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ServiceOptions();
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.ServiceOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
@@ -48801,7 +50661,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.ServiceOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.defaultHost"] != null)
@@ -48910,7 +50770,7 @@
                     this[".google.api.methodSignature"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -49037,9 +50897,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodOptions.decode = function decode(reader, length, error) {
+                MethodOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -49055,17 +50919,17 @@
                                 break;
                             }
                         case 35: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 72295728: {
-                                message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32());
+                                message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 1051: {
@@ -49075,11 +50939,11 @@
                                 break;
                             }
                         case 1049: {
-                                message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32());
+                                message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -49110,9 +50974,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodOptions.verify = function verify(message) {
+                MethodOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                         if (typeof message.deprecated !== "boolean")
                             return "deprecated: boolean expected";
@@ -49126,7 +50994,7 @@
                             break;
                         }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -49134,13 +51002,13 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
                     }
                     if (message[".google.api.http"] != null && message.hasOwnProperty(".google.api.http")) {
-                        var error = $root.google.api.HttpRule.verify(message[".google.api.http"]);
+                        var error = $root.google.api.HttpRule.verify(message[".google.api.http"], long + 1);
                         if (error)
                             return ".google.api.http." + error;
                     }
@@ -49152,7 +51020,7 @@
                                 return ".google.api.methodSignature: string[] expected";
                     }
                     if (message[".google.longrunning.operationInfo"] != null && message.hasOwnProperty(".google.longrunning.operationInfo")) {
-                        var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"]);
+                        var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"], long + 1);
                         if (error)
                             return ".google.longrunning.operationInfo." + error;
                     }
@@ -49167,9 +51035,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MethodOptions} MethodOptions
                  */
-                MethodOptions.fromObject = function fromObject(object) {
+                MethodOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MethodOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MethodOptions();
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
@@ -49196,7 +51068,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.MethodOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -49205,13 +51077,13 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.MethodOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.http"] != null) {
                         if (typeof object[".google.api.http"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.api.http: object expected");
-                        message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"]);
+                        message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"], long + 1);
                     }
                     if (object[".google.api.methodSignature"]) {
                         if (!Array.isArray(object[".google.api.methodSignature"]))
@@ -49223,7 +51095,7 @@
                     if (object[".google.longrunning.operationInfo"] != null) {
                         if (typeof object[".google.longrunning.operationInfo"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.longrunning.operationInfo: object expected");
-                        message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"]);
+                        message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"], long + 1);
                     }
                     return message;
                 };
@@ -49347,7 +51219,7 @@
                     this.name = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -49473,9 +51345,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                UninterpretedOption.decode = function decode(reader, length, error) {
+                UninterpretedOption.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -49485,7 +51361,7 @@
                         case 2: {
                                 if (!(message.name && message.name.length))
                                     message.name = [];
-                                message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32()));
+                                message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
@@ -49513,7 +51389,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -49544,14 +51420,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                UninterpretedOption.verify = function verify(message) {
+                UninterpretedOption.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name")) {
                         if (!Array.isArray(message.name))
                             return "name: array expected";
                         for (var i = 0; i < message.name.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i], long + 1);
                             if (error)
                                 return "name." + error;
                         }
@@ -49585,9 +51465,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.UninterpretedOption} UninterpretedOption
                  */
-                UninterpretedOption.fromObject = function fromObject(object) {
+                UninterpretedOption.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.UninterpretedOption)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.UninterpretedOption();
                     if (object.name) {
                         if (!Array.isArray(object.name))
@@ -49596,7 +51480,7 @@
                         for (var i = 0; i < object.name.length; ++i) {
                             if (typeof object.name[i] !== "object")
                                 throw TypeError(".google.protobuf.UninterpretedOption.name: object expected");
-                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i]);
+                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i], long + 1);
                         }
                     }
                     if (object.identifierValue != null)
@@ -49741,7 +51625,7 @@
                     function NamePart(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -49814,9 +51698,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    NamePart.decode = function decode(reader, length, error) {
+                    NamePart.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption.NamePart();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -49832,7 +51720,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -49867,9 +51755,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    NamePart.verify = function verify(message) {
+                    NamePart.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (!$util.isString(message.namePart))
                             return "namePart: string expected";
                         if (typeof message.isExtension !== "boolean")
@@ -49885,9 +51777,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart
                      */
-                    NamePart.fromObject = function fromObject(object) {
+                    NamePart.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.UninterpretedOption.NamePart)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.UninterpretedOption.NamePart();
                         if (object.namePart != null)
                             message.namePart = String(object.namePart);
@@ -49979,7 +51875,7 @@
                 function FeatureSet(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -50114,9 +52010,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FeatureSet.decode = function decode(reader, length, error) {
+                FeatureSet.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSet();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -50156,7 +52056,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -50187,9 +52087,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FeatureSet.verify = function verify(message) {
+                FeatureSet.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.fieldPresence != null && message.hasOwnProperty("fieldPresence"))
                         switch (message.fieldPresence) {
                         default:
@@ -50276,9 +52180,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FeatureSet} FeatureSet
                  */
-                FeatureSet.fromObject = function fromObject(object) {
+                FeatureSet.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FeatureSet)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FeatureSet();
                     switch (object.fieldPresence) {
                     default:
@@ -50656,7 +52564,7 @@
                     function VisibilityFeature(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -50711,9 +52619,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    VisibilityFeature.decode = function decode(reader, length, error) {
+                    VisibilityFeature.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSet.VisibilityFeature();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -50721,7 +52633,7 @@
                                 break;
                             switch (tag >>> 3) {
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -50752,9 +52664,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    VisibilityFeature.verify = function verify(message) {
+                    VisibilityFeature.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         return null;
                     };
     
@@ -50766,9 +52682,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FeatureSet.VisibilityFeature} VisibilityFeature
                      */
-                    VisibilityFeature.fromObject = function fromObject(object) {
+                    VisibilityFeature.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FeatureSet.VisibilityFeature)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         return new $root.google.protobuf.FeatureSet.VisibilityFeature();
                     };
     
@@ -50860,7 +52780,7 @@
                     this.defaults = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -50946,9 +52866,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FeatureSetDefaults.decode = function decode(reader, length, error) {
+                FeatureSetDefaults.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSetDefaults();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -50958,7 +52882,7 @@
                         case 1: {
                                 if (!(message.defaults && message.defaults.length))
                                     message.defaults = [];
-                                message.defaults.push($root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.decode(reader, reader.uint32()));
+                                message.defaults.push($root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 4: {
@@ -50970,7 +52894,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -51001,14 +52925,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FeatureSetDefaults.verify = function verify(message) {
+                FeatureSetDefaults.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.defaults != null && message.hasOwnProperty("defaults")) {
                         if (!Array.isArray(message.defaults))
                             return "defaults: array expected";
                         for (var i = 0; i < message.defaults.length; ++i) {
-                            var error = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify(message.defaults[i]);
+                            var error = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify(message.defaults[i], long + 1);
                             if (error)
                                 return "defaults." + error;
                         }
@@ -51060,9 +52988,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FeatureSetDefaults} FeatureSetDefaults
                  */
-                FeatureSetDefaults.fromObject = function fromObject(object) {
+                FeatureSetDefaults.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FeatureSetDefaults)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FeatureSetDefaults();
                     if (object.defaults) {
                         if (!Array.isArray(object.defaults))
@@ -51071,7 +53003,7 @@
                         for (var i = 0; i < object.defaults.length; ++i) {
                             if (typeof object.defaults[i] !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.defaults: object expected");
-                            message.defaults[i] = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fromObject(object.defaults[i]);
+                            message.defaults[i] = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fromObject(object.defaults[i], long + 1);
                         }
                     }
                     switch (object.minimumEdition) {
@@ -51268,7 +53200,7 @@
                     function FeatureSetEditionDefault(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -51353,9 +53285,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    FeatureSetEditionDefault.decode = function decode(reader, length, error) {
+                    FeatureSetEditionDefault.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -51367,15 +53303,15 @@
                                     break;
                                 }
                             case 4: {
-                                    message.overridableFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                    message.overridableFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 5: {
-                                    message.fixedFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                    message.fixedFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -51406,9 +53342,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    FeatureSetEditionDefault.verify = function verify(message) {
+                    FeatureSetEditionDefault.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.edition != null && message.hasOwnProperty("edition"))
                             switch (message.edition) {
                             default:
@@ -51428,12 +53368,12 @@
                                 break;
                             }
                         if (message.overridableFeatures != null && message.hasOwnProperty("overridableFeatures")) {
-                            var error = $root.google.protobuf.FeatureSet.verify(message.overridableFeatures);
+                            var error = $root.google.protobuf.FeatureSet.verify(message.overridableFeatures, long + 1);
                             if (error)
                                 return "overridableFeatures." + error;
                         }
                         if (message.fixedFeatures != null && message.hasOwnProperty("fixedFeatures")) {
-                            var error = $root.google.protobuf.FeatureSet.verify(message.fixedFeatures);
+                            var error = $root.google.protobuf.FeatureSet.verify(message.fixedFeatures, long + 1);
                             if (error)
                                 return "fixedFeatures." + error;
                         }
@@ -51448,9 +53388,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault} FeatureSetEditionDefault
                      */
-                    FeatureSetEditionDefault.fromObject = function fromObject(object) {
+                    FeatureSetEditionDefault.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault();
                         switch (object.edition) {
                         default:
@@ -51511,12 +53455,12 @@
                         if (object.overridableFeatures != null) {
                             if (typeof object.overridableFeatures !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridableFeatures: object expected");
-                            message.overridableFeatures = $root.google.protobuf.FeatureSet.fromObject(object.overridableFeatures);
+                            message.overridableFeatures = $root.google.protobuf.FeatureSet.fromObject(object.overridableFeatures, long + 1);
                         }
                         if (object.fixedFeatures != null) {
                             if (typeof object.fixedFeatures !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixedFeatures: object expected");
-                            message.fixedFeatures = $root.google.protobuf.FeatureSet.fromObject(object.fixedFeatures);
+                            message.fixedFeatures = $root.google.protobuf.FeatureSet.fromObject(object.fixedFeatures, long + 1);
                         }
                         return message;
                     };
@@ -51601,7 +53545,7 @@
                     this.location = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -51667,9 +53611,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                SourceCodeInfo.decode = function decode(reader, length, error) {
+                SourceCodeInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -51679,11 +53627,11 @@
                         case 1: {
                                 if (!(message.location && message.location.length))
                                     message.location = [];
-                                message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32()));
+                                message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -51714,14 +53662,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                SourceCodeInfo.verify = function verify(message) {
+                SourceCodeInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.location != null && message.hasOwnProperty("location")) {
                         if (!Array.isArray(message.location))
                             return "location: array expected";
                         for (var i = 0; i < message.location.length; ++i) {
-                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i]);
+                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i], long + 1);
                             if (error)
                                 return "location." + error;
                         }
@@ -51737,9 +53689,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo
                  */
-                SourceCodeInfo.fromObject = function fromObject(object) {
+                SourceCodeInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.SourceCodeInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.SourceCodeInfo();
                     if (object.location) {
                         if (!Array.isArray(object.location))
@@ -51748,7 +53704,7 @@
                         for (var i = 0; i < object.location.length; ++i) {
                             if (typeof object.location[i] !== "object")
                                 throw TypeError(".google.protobuf.SourceCodeInfo.location: object expected");
-                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i]);
+                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i], long + 1);
                         }
                     }
                     return message;
@@ -51830,7 +53786,7 @@
                         this.leadingDetachedComments = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -51944,9 +53900,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Location.decode = function decode(reader, length, error) {
+                    Location.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo.Location();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -51990,7 +53950,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -52021,9 +53981,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Location.verify = function verify(message) {
+                    Location.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.path != null && message.hasOwnProperty("path")) {
                             if (!Array.isArray(message.path))
                                 return "path: array expected";
@@ -52062,9 +54026,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.SourceCodeInfo.Location} Location
                      */
-                    Location.fromObject = function fromObject(object) {
+                    Location.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.SourceCodeInfo.Location)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.SourceCodeInfo.Location();
                         if (object.path) {
                             if (!Array.isArray(object.path))
@@ -52191,7 +54159,7 @@
                     this.annotation = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -52257,9 +54225,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GeneratedCodeInfo.decode = function decode(reader, length, error) {
+                GeneratedCodeInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -52269,11 +54241,11 @@
                         case 1: {
                                 if (!(message.annotation && message.annotation.length))
                                     message.annotation = [];
-                                message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32()));
+                                message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -52304,14 +54276,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GeneratedCodeInfo.verify = function verify(message) {
+                GeneratedCodeInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.annotation != null && message.hasOwnProperty("annotation")) {
                         if (!Array.isArray(message.annotation))
                             return "annotation: array expected";
                         for (var i = 0; i < message.annotation.length; ++i) {
-                            var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i]);
+                            var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i], long + 1);
                             if (error)
                                 return "annotation." + error;
                         }
@@ -52327,9 +54303,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo
                  */
-                GeneratedCodeInfo.fromObject = function fromObject(object) {
+                GeneratedCodeInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.GeneratedCodeInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.GeneratedCodeInfo();
                     if (object.annotation) {
                         if (!Array.isArray(object.annotation))
@@ -52338,7 +54318,7 @@
                         for (var i = 0; i < object.annotation.length; ++i) {
                             if (typeof object.annotation[i] !== "object")
                                 throw TypeError(".google.protobuf.GeneratedCodeInfo.annotation: object expected");
-                            message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i]);
+                            message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i], long + 1);
                         }
                     }
                     return message;
@@ -52418,7 +54398,7 @@
                         this.path = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -52527,9 +54507,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Annotation.decode = function decode(reader, length, error) {
+                    Annotation.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo.Annotation();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -52564,7 +54548,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -52595,9 +54579,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Annotation.verify = function verify(message) {
+                    Annotation.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.path != null && message.hasOwnProperty("path")) {
                             if (!Array.isArray(message.path))
                                 return "path: array expected";
@@ -52634,9 +54622,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation
                      */
-                    Annotation.fromObject = function fromObject(object) {
+                    Annotation.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.GeneratedCodeInfo.Annotation)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.GeneratedCodeInfo.Annotation();
                         if (object.path) {
                             if (!Array.isArray(object.path))
@@ -52796,7 +54788,7 @@
                 function Duration(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -52871,9 +54863,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Duration.decode = function decode(reader, length, error) {
+                Duration.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Duration();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -52889,7 +54885,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -52920,9 +54916,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Duration.verify = function verify(message) {
+                Duration.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.seconds != null && message.hasOwnProperty("seconds"))
                         if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high)))
                             return "seconds: integer|Long expected";
@@ -52940,9 +54940,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Duration} Duration
                  */
-                Duration.fromObject = function fromObject(object) {
+                Duration.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Duration)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Duration();
                     if (object.seconds != null)
                         if ($util.Long)
@@ -53039,7 +55043,7 @@
                 function Any(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -53114,9 +55118,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Any.decode = function decode(reader, length, error) {
+                Any.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Any();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -53132,7 +55140,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -53163,9 +55171,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Any.verify = function verify(message) {
+                Any.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type_url != null && message.hasOwnProperty("type_url"))
                         if (!$util.isString(message.type_url))
                             return "type_url: string expected";
@@ -53183,9 +55195,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Any} Any
                  */
-                Any.fromObject = function fromObject(object) {
+                Any.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Any)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Any();
                     if (object.type_url != null)
                         message.type_url = String(object.type_url);
@@ -53275,7 +55291,7 @@
                 function Empty(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -53330,9 +55346,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Empty.decode = function decode(reader, length, error) {
+                Empty.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Empty();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -53340,7 +55360,7 @@
                             break;
                         switch (tag >>> 3) {
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -53371,9 +55391,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Empty.verify = function verify(message) {
+                Empty.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     return null;
                 };
     
@@ -53385,9 +55409,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Empty} Empty
                  */
-                Empty.fromObject = function fromObject(object) {
+                Empty.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Empty)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     return new $root.google.protobuf.Empty();
                 };
     
@@ -53454,7 +55482,7 @@
                     this.paths = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -53520,9 +55548,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldMask.decode = function decode(reader, length, error) {
+                FieldMask.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldMask();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -53536,7 +55568,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -53567,9 +55599,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldMask.verify = function verify(message) {
+                FieldMask.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.paths != null && message.hasOwnProperty("paths")) {
                         if (!Array.isArray(message.paths))
                             return "paths: array expected";
@@ -53588,9 +55624,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldMask} FieldMask
                  */
-                FieldMask.fromObject = function fromObject(object) {
+                FieldMask.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldMask)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldMask();
                     if (object.paths) {
                         if (!Array.isArray(object.paths))
@@ -53675,7 +55715,7 @@
                 function Timestamp(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -53750,9 +55790,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Timestamp.decode = function decode(reader, length, error) {
+                Timestamp.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Timestamp();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -53768,7 +55812,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -53799,9 +55843,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Timestamp.verify = function verify(message) {
+                Timestamp.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.seconds != null && message.hasOwnProperty("seconds"))
                         if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high)))
                             return "seconds: integer|Long expected";
@@ -53819,9 +55867,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Timestamp} Timestamp
                  */
-                Timestamp.fromObject = function fromObject(object) {
+                Timestamp.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Timestamp)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Timestamp();
                     if (object.seconds != null)
                         if ($util.Long)
@@ -54133,7 +56185,7 @@
                 function Operation(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -54252,9 +56304,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Operation.decode = function decode(reader, length, error) {
+                Operation.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.Operation();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -54266,7 +56322,7 @@
                                 break;
                             }
                         case 2: {
-                                message.metadata = $root.google.protobuf.Any.decode(reader, reader.uint32());
+                                message.metadata = $root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -54274,15 +56330,15 @@
                                 break;
                             }
                         case 4: {
-                                message.error = $root.google.rpc.Status.decode(reader, reader.uint32());
+                                message.error = $root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 5: {
-                                message.response = $root.google.protobuf.Any.decode(reader, reader.uint32());
+                                message.response = $root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -54313,15 +56369,19 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Operation.verify = function verify(message) {
+                Operation.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.metadata != null && message.hasOwnProperty("metadata")) {
-                        var error = $root.google.protobuf.Any.verify(message.metadata);
+                        var error = $root.google.protobuf.Any.verify(message.metadata, long + 1);
                         if (error)
                             return "metadata." + error;
                     }
@@ -54331,7 +56391,7 @@
                     if (message.error != null && message.hasOwnProperty("error")) {
                         properties.result = 1;
                         {
-                            var error = $root.google.rpc.Status.verify(message.error);
+                            var error = $root.google.rpc.Status.verify(message.error, long + 1);
                             if (error)
                                 return "error." + error;
                         }
@@ -54341,7 +56401,7 @@
                             return "result: multiple values";
                         properties.result = 1;
                         {
-                            var error = $root.google.protobuf.Any.verify(message.response);
+                            var error = $root.google.protobuf.Any.verify(message.response, long + 1);
                             if (error)
                                 return "response." + error;
                         }
@@ -54357,28 +56417,32 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.Operation} Operation
                  */
-                Operation.fromObject = function fromObject(object) {
+                Operation.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.Operation)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.Operation();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.metadata != null) {
                         if (typeof object.metadata !== "object")
                             throw TypeError(".google.longrunning.Operation.metadata: object expected");
-                        message.metadata = $root.google.protobuf.Any.fromObject(object.metadata);
+                        message.metadata = $root.google.protobuf.Any.fromObject(object.metadata, long + 1);
                     }
                     if (object.done != null)
                         message.done = Boolean(object.done);
                     if (object.error != null) {
                         if (typeof object.error !== "object")
                             throw TypeError(".google.longrunning.Operation.error: object expected");
-                        message.error = $root.google.rpc.Status.fromObject(object.error);
+                        message.error = $root.google.rpc.Status.fromObject(object.error, long + 1);
                     }
                     if (object.response != null) {
                         if (typeof object.response !== "object")
                             throw TypeError(".google.longrunning.Operation.response: object expected");
-                        message.response = $root.google.protobuf.Any.fromObject(object.response);
+                        message.response = $root.google.protobuf.Any.fromObject(object.response, long + 1);
                     }
                     return message;
                 };
@@ -54469,7 +56533,7 @@
                 function GetOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -54534,9 +56598,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GetOperationRequest.decode = function decode(reader, length, error) {
+                GetOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.GetOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -54548,7 +56616,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -54579,9 +56647,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GetOperationRequest.verify = function verify(message) {
+                GetOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -54596,9 +56668,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.GetOperationRequest} GetOperationRequest
                  */
-                GetOperationRequest.fromObject = function fromObject(object) {
+                GetOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.GetOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.GetOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -54677,7 +56753,7 @@
                 function ListOperationsRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -54772,9 +56848,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListOperationsRequest.decode = function decode(reader, length, error) {
+                ListOperationsRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.ListOperationsRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -54798,7 +56878,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -54829,9 +56909,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListOperationsRequest.verify = function verify(message) {
+                ListOperationsRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -54855,9 +56939,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.ListOperationsRequest} ListOperationsRequest
                  */
-                ListOperationsRequest.fromObject = function fromObject(object) {
+                ListOperationsRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.ListOperationsRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.ListOperationsRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -54951,7 +57039,7 @@
                     this.operations = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -55027,9 +57115,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListOperationsResponse.decode = function decode(reader, length, error) {
+                ListOperationsResponse.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.ListOperationsResponse();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -55039,7 +57131,7 @@
                         case 1: {
                                 if (!(message.operations && message.operations.length))
                                     message.operations = [];
-                                message.operations.push($root.google.longrunning.Operation.decode(reader, reader.uint32()));
+                                message.operations.push($root.google.longrunning.Operation.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
@@ -55047,7 +57139,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -55078,14 +57170,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListOperationsResponse.verify = function verify(message) {
+                ListOperationsResponse.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.operations != null && message.hasOwnProperty("operations")) {
                         if (!Array.isArray(message.operations))
                             return "operations: array expected";
                         for (var i = 0; i < message.operations.length; ++i) {
-                            var error = $root.google.longrunning.Operation.verify(message.operations[i]);
+                            var error = $root.google.longrunning.Operation.verify(message.operations[i], long + 1);
                             if (error)
                                 return "operations." + error;
                         }
@@ -55104,9 +57200,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.ListOperationsResponse} ListOperationsResponse
                  */
-                ListOperationsResponse.fromObject = function fromObject(object) {
+                ListOperationsResponse.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.ListOperationsResponse)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.ListOperationsResponse();
                     if (object.operations) {
                         if (!Array.isArray(object.operations))
@@ -55115,7 +57215,7 @@
                         for (var i = 0; i < object.operations.length; ++i) {
                             if (typeof object.operations[i] !== "object")
                                 throw TypeError(".google.longrunning.ListOperationsResponse.operations: object expected");
-                            message.operations[i] = $root.google.longrunning.Operation.fromObject(object.operations[i]);
+                            message.operations[i] = $root.google.longrunning.Operation.fromObject(object.operations[i], long + 1);
                         }
                     }
                     if (object.nextPageToken != null)
@@ -55199,7 +57299,7 @@
                 function CancelOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -55264,9 +57364,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CancelOperationRequest.decode = function decode(reader, length, error) {
+                CancelOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.CancelOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -55278,7 +57382,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -55309,9 +57413,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CancelOperationRequest.verify = function verify(message) {
+                CancelOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -55326,9 +57434,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.CancelOperationRequest} CancelOperationRequest
                  */
-                CancelOperationRequest.fromObject = function fromObject(object) {
+                CancelOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.CancelOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.CancelOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -55404,7 +57516,7 @@
                 function DeleteOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -55469,9 +57581,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DeleteOperationRequest.decode = function decode(reader, length, error) {
+                DeleteOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.DeleteOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -55483,7 +57599,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -55514,9 +57630,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DeleteOperationRequest.verify = function verify(message) {
+                DeleteOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -55531,9 +57651,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.DeleteOperationRequest} DeleteOperationRequest
                  */
-                DeleteOperationRequest.fromObject = function fromObject(object) {
+                DeleteOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.DeleteOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.DeleteOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -55610,7 +57734,7 @@
                 function WaitOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -55685,9 +57809,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                WaitOperationRequest.decode = function decode(reader, length, error) {
+                WaitOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.WaitOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -55699,11 +57827,11 @@
                                 break;
                             }
                         case 2: {
-                                message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -55734,14 +57862,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                WaitOperationRequest.verify = function verify(message) {
+                WaitOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.timeout != null && message.hasOwnProperty("timeout")) {
-                        var error = $root.google.protobuf.Duration.verify(message.timeout);
+                        var error = $root.google.protobuf.Duration.verify(message.timeout, long + 1);
                         if (error)
                             return "timeout." + error;
                     }
@@ -55756,16 +57888,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.WaitOperationRequest} WaitOperationRequest
                  */
-                WaitOperationRequest.fromObject = function fromObject(object) {
+                WaitOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.WaitOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.WaitOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.timeout != null) {
                         if (typeof object.timeout !== "object")
                             throw TypeError(".google.longrunning.WaitOperationRequest.timeout: object expected");
-                        message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout);
+                        message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout, long + 1);
                     }
                     return message;
                 };
@@ -55844,7 +57980,7 @@
                 function OperationInfo(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -55919,9 +58055,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OperationInfo.decode = function decode(reader, length, error) {
+                OperationInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.OperationInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -55937,7 +58077,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -55968,9 +58108,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OperationInfo.verify = function verify(message) {
+                OperationInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.responseType != null && message.hasOwnProperty("responseType"))
                         if (!$util.isString(message.responseType))
                             return "responseType: string expected";
@@ -55988,9 +58132,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.OperationInfo} OperationInfo
                  */
-                OperationInfo.fromObject = function fromObject(object) {
+                OperationInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.OperationInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.OperationInfo();
                     if (object.responseType != null)
                         message.responseType = String(object.responseType);
@@ -56087,7 +58235,7 @@
                     this.details = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -56173,9 +58321,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Status.decode = function decode(reader, length, error) {
+                Status.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.rpc.Status();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -56193,11 +58345,11 @@
                         case 3: {
                                 if (!(message.details && message.details.length))
                                     message.details = [];
-                                message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32()));
+                                message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -56228,9 +58380,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Status.verify = function verify(message) {
+                Status.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.code != null && message.hasOwnProperty("code"))
                         if (!$util.isInteger(message.code))
                             return "code: integer expected";
@@ -56241,7 +58397,7 @@
                         if (!Array.isArray(message.details))
                             return "details: array expected";
                         for (var i = 0; i < message.details.length; ++i) {
-                            var error = $root.google.protobuf.Any.verify(message.details[i]);
+                            var error = $root.google.protobuf.Any.verify(message.details[i], long + 1);
                             if (error)
                                 return "details." + error;
                         }
@@ -56257,9 +58413,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.rpc.Status} Status
                  */
-                Status.fromObject = function fromObject(object) {
+                Status.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.rpc.Status)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.rpc.Status();
                     if (object.code != null)
                         message.code = object.code | 0;
@@ -56272,7 +58432,7 @@
                         for (var i = 0; i < object.details.length; ++i) {
                             if (typeof object.details[i] !== "object")
                                 throw TypeError(".google.rpc.Status.details: object expected");
-                            message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i]);
+                            message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i], long + 1);
                         }
                     }
                     return message;
@@ -56399,7 +58559,7 @@
                 function TimeOfDay(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -56494,9 +58654,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                TimeOfDay.decode = function decode(reader, length, error) {
+                TimeOfDay.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.type.TimeOfDay();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -56520,7 +58684,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -56551,9 +58715,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                TimeOfDay.verify = function verify(message) {
+                TimeOfDay.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.hours != null && message.hasOwnProperty("hours"))
                         if (!$util.isInteger(message.hours))
                             return "hours: integer expected";
@@ -56577,9 +58745,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.type.TimeOfDay} TimeOfDay
                  */
-                TimeOfDay.fromObject = function fromObject(object) {
+                TimeOfDay.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.type.TimeOfDay)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.type.TimeOfDay();
                     if (object.hours != null)
                         message.hours = object.hours | 0;
diff --git a/packages/google-cloud-redis/README.md b/packages/google-cloud-redis/README.md
index 405962c6ee7b..50d70fa0515a 100644
--- a/packages/google-cloud-redis/README.md
+++ b/packages/google-cloud-redis/README.md
@@ -69,7 +69,6 @@ Samples are in the [`samples/`][homepage_samples] directory. Each sample's `READ
 | reschedule maintenance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1/cloud_redis.reschedule_maintenance.js) |
 | update instance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1/cloud_redis.update_instance.js) |
 | upgrade instance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1/cloud_redis.upgrade_instance.js) |
-| cloud | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1/snippet_metadata_google.cloud.redis.v1.json) |
 | create instance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1beta1/cloud_redis.create_instance.js) |
 | delete instance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1beta1/cloud_redis.delete_instance.js) |
 | export instance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1beta1/cloud_redis.export_instance.js) |
@@ -81,7 +80,6 @@ Samples are in the [`samples/`][homepage_samples] directory. Each sample's `READ
 | reschedule maintenance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1beta1/cloud_redis.reschedule_maintenance.js) |
 | update instance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1beta1/cloud_redis.update_instance.js) |
 | upgrade instance | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1beta1/cloud_redis.upgrade_instance.js) |
-| cloud | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-redis/samples/generated/v1beta1/snippet_metadata_google.cloud.redis.v1beta1.json) |
 
 
 ## Supported Node.js Versions
diff --git a/packages/google-cloud-redis/protos/protos.js b/packages/google-cloud-redis/protos/protos.js
index c28f353482de..1afd7f22ed0c 100644
--- a/packages/google-cloud-redis/protos/protos.js
+++ b/packages/google-cloud-redis/protos/protos.js
@@ -485,7 +485,7 @@
                         function NodeInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -560,9 +560,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        NodeInfo.decode = function decode(reader, length, error) {
+                        NodeInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.NodeInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -578,7 +582,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -609,9 +613,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        NodeInfo.verify = function verify(message) {
+                        NodeInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.id != null && message.hasOwnProperty("id"))
                                 if (!$util.isString(message.id))
                                     return "id: string expected";
@@ -629,9 +637,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.NodeInfo} NodeInfo
                          */
-                        NodeInfo.fromObject = function fromObject(object) {
+                        NodeInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.NodeInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.NodeInfo();
                             if (object.id != null)
                                 message.id = String(object.id);
@@ -753,7 +765,7 @@
                             this.availableMaintenanceVersions = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1167,9 +1179,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Instance.decode = function decode(reader, length, error) {
+                        Instance.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.Instance(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1200,10 +1216,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -1240,7 +1258,7 @@
                                         break;
                                     }
                                 case 13: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
@@ -1267,10 +1285,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.redisConfigs, key);
                                         message.redisConfigs[key] = value;
                                         break;
                                     }
@@ -1301,7 +1321,7 @@
                                 case 25: {
                                         if (!(message.serverCaCerts && message.serverCaCerts.length))
                                             message.serverCaCerts = [];
-                                        message.serverCaCerts.push($root.google.cloud.redis.v1.TlsCertificate.decode(reader, reader.uint32()));
+                                        message.serverCaCerts.push($root.google.cloud.redis.v1.TlsCertificate.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 26: {
@@ -1309,11 +1329,11 @@
                                         break;
                                     }
                                 case 27: {
-                                        message.maintenancePolicy = $root.google.cloud.redis.v1.MaintenancePolicy.decode(reader, reader.uint32());
+                                        message.maintenancePolicy = $root.google.cloud.redis.v1.MaintenancePolicy.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 28: {
-                                        message.maintenanceSchedule = $root.google.cloud.redis.v1.MaintenanceSchedule.decode(reader, reader.uint32());
+                                        message.maintenanceSchedule = $root.google.cloud.redis.v1.MaintenanceSchedule.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 31: {
@@ -1323,7 +1343,7 @@
                                 case 32: {
                                         if (!(message.nodes && message.nodes.length))
                                             message.nodes = [];
-                                        message.nodes.push($root.google.cloud.redis.v1.NodeInfo.decode(reader, reader.uint32()));
+                                        message.nodes.push($root.google.cloud.redis.v1.NodeInfo.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 33: {
@@ -1343,7 +1363,7 @@
                                         break;
                                     }
                                 case 37: {
-                                        message.persistenceConfig = $root.google.cloud.redis.v1.PersistenceConfig.decode(reader, reader.uint32());
+                                        message.persistenceConfig = $root.google.cloud.redis.v1.PersistenceConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 38: {
@@ -1368,7 +1388,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -1399,9 +1419,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Instance.verify = function verify(message) {
+                        Instance.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -1441,7 +1465,7 @@
                                 if (!$util.isString(message.currentLocationId))
                                     return "currentLocationId: string expected";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
@@ -1505,7 +1529,7 @@
                                 if (!Array.isArray(message.serverCaCerts))
                                     return "serverCaCerts: array expected";
                                 for (var i = 0; i < message.serverCaCerts.length; ++i) {
-                                    var error = $root.google.cloud.redis.v1.TlsCertificate.verify(message.serverCaCerts[i]);
+                                    var error = $root.google.cloud.redis.v1.TlsCertificate.verify(message.serverCaCerts[i], long + 1);
                                     if (error)
                                         return "serverCaCerts." + error;
                                 }
@@ -1520,12 +1544,12 @@
                                     break;
                                 }
                             if (message.maintenancePolicy != null && message.hasOwnProperty("maintenancePolicy")) {
-                                var error = $root.google.cloud.redis.v1.MaintenancePolicy.verify(message.maintenancePolicy);
+                                var error = $root.google.cloud.redis.v1.MaintenancePolicy.verify(message.maintenancePolicy, long + 1);
                                 if (error)
                                     return "maintenancePolicy." + error;
                             }
                             if (message.maintenanceSchedule != null && message.hasOwnProperty("maintenanceSchedule")) {
-                                var error = $root.google.cloud.redis.v1.MaintenanceSchedule.verify(message.maintenanceSchedule);
+                                var error = $root.google.cloud.redis.v1.MaintenanceSchedule.verify(message.maintenanceSchedule, long + 1);
                                 if (error)
                                     return "maintenanceSchedule." + error;
                             }
@@ -1536,7 +1560,7 @@
                                 if (!Array.isArray(message.nodes))
                                     return "nodes: array expected";
                                 for (var i = 0; i < message.nodes.length; ++i) {
-                                    var error = $root.google.cloud.redis.v1.NodeInfo.verify(message.nodes[i]);
+                                    var error = $root.google.cloud.redis.v1.NodeInfo.verify(message.nodes[i], long + 1);
                                     if (error)
                                         return "nodes." + error;
                                 }
@@ -1560,7 +1584,7 @@
                                 if (!$util.isString(message.customerManagedKey))
                                     return "customerManagedKey: string expected";
                             if (message.persistenceConfig != null && message.hasOwnProperty("persistenceConfig")) {
-                                var error = $root.google.cloud.redis.v1.PersistenceConfig.verify(message.persistenceConfig);
+                                var error = $root.google.cloud.redis.v1.PersistenceConfig.verify(message.persistenceConfig, long + 1);
                                 if (error)
                                     return "persistenceConfig." + error;
                             }
@@ -1597,9 +1621,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.Instance} Instance
                          */
-                        Instance.fromObject = function fromObject(object) {
+                        Instance.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.Instance)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.Instance();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -1609,8 +1637,11 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.redis.v1.Instance.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.locationId != null)
                                 message.locationId = String(object.locationId);
@@ -1631,7 +1662,7 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.Instance.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             switch (object.state) {
                             default:
@@ -1683,8 +1714,11 @@
                                 if (typeof object.redisConfigs !== "object")
                                     throw TypeError(".google.cloud.redis.v1.Instance.redisConfigs: object expected");
                                 message.redisConfigs = {};
-                                for (var keys = Object.keys(object.redisConfigs), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.redisConfigs), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.redisConfigs, keys[i]);
                                     message.redisConfigs[keys[i]] = String(object.redisConfigs[keys[i]]);
+                                }
                             }
                             switch (object.tier) {
                             default:
@@ -1741,7 +1775,7 @@
                                 for (var i = 0; i < object.serverCaCerts.length; ++i) {
                                     if (typeof object.serverCaCerts[i] !== "object")
                                         throw TypeError(".google.cloud.redis.v1.Instance.serverCaCerts: object expected");
-                                    message.serverCaCerts[i] = $root.google.cloud.redis.v1.TlsCertificate.fromObject(object.serverCaCerts[i]);
+                                    message.serverCaCerts[i] = $root.google.cloud.redis.v1.TlsCertificate.fromObject(object.serverCaCerts[i], long + 1);
                                 }
                             }
                             switch (object.transitEncryptionMode) {
@@ -1767,12 +1801,12 @@
                             if (object.maintenancePolicy != null) {
                                 if (typeof object.maintenancePolicy !== "object")
                                     throw TypeError(".google.cloud.redis.v1.Instance.maintenancePolicy: object expected");
-                                message.maintenancePolicy = $root.google.cloud.redis.v1.MaintenancePolicy.fromObject(object.maintenancePolicy);
+                                message.maintenancePolicy = $root.google.cloud.redis.v1.MaintenancePolicy.fromObject(object.maintenancePolicy, long + 1);
                             }
                             if (object.maintenanceSchedule != null) {
                                 if (typeof object.maintenanceSchedule !== "object")
                                     throw TypeError(".google.cloud.redis.v1.Instance.maintenanceSchedule: object expected");
-                                message.maintenanceSchedule = $root.google.cloud.redis.v1.MaintenanceSchedule.fromObject(object.maintenanceSchedule);
+                                message.maintenanceSchedule = $root.google.cloud.redis.v1.MaintenanceSchedule.fromObject(object.maintenanceSchedule, long + 1);
                             }
                             if (object.replicaCount != null)
                                 message.replicaCount = object.replicaCount | 0;
@@ -1783,7 +1817,7 @@
                                 for (var i = 0; i < object.nodes.length; ++i) {
                                     if (typeof object.nodes[i] !== "object")
                                         throw TypeError(".google.cloud.redis.v1.Instance.nodes: object expected");
-                                    message.nodes[i] = $root.google.cloud.redis.v1.NodeInfo.fromObject(object.nodes[i]);
+                                    message.nodes[i] = $root.google.cloud.redis.v1.NodeInfo.fromObject(object.nodes[i], long + 1);
                                 }
                             }
                             if (object.readEndpoint != null)
@@ -1815,7 +1849,7 @@
                             if (object.persistenceConfig != null) {
                                 if (typeof object.persistenceConfig !== "object")
                                     throw TypeError(".google.cloud.redis.v1.Instance.persistenceConfig: object expected");
-                                message.persistenceConfig = $root.google.cloud.redis.v1.PersistenceConfig.fromObject(object.persistenceConfig);
+                                message.persistenceConfig = $root.google.cloud.redis.v1.PersistenceConfig.fromObject(object.persistenceConfig, long + 1);
                             }
                             if (object.suspensionReasons) {
                                 if (!Array.isArray(object.suspensionReasons))
@@ -1911,8 +1945,11 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.locationId != null && message.hasOwnProperty("locationId"))
                                 object.locationId = message.locationId;
@@ -1936,8 +1973,11 @@
                                 object.statusMessage = message.statusMessage;
                             if (message.redisConfigs && (keys2 = Object.keys(message.redisConfigs)).length) {
                                 object.redisConfigs = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.redisConfigs, keys2[j]);
                                     object.redisConfigs[keys2[j]] = message.redisConfigs[keys2[j]];
+                                }
                             }
                             if (message.tier != null && message.hasOwnProperty("tier"))
                                 object.tier = options.enums === String ? $root.google.cloud.redis.v1.Instance.Tier[message.tier] === undefined ? message.tier : $root.google.cloud.redis.v1.Instance.Tier[message.tier] : message.tier;
@@ -2154,7 +2194,7 @@
                         function PersistenceConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2249,9 +2289,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PersistenceConfig.decode = function decode(reader, length, error) {
+                        PersistenceConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.PersistenceConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2267,15 +2311,15 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.rdbNextSnapshotTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.rdbNextSnapshotTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
-                                        message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2306,9 +2350,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PersistenceConfig.verify = function verify(message) {
+                        PersistenceConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.persistenceMode != null && message.hasOwnProperty("persistenceMode"))
                                 switch (message.persistenceMode) {
                                 default:
@@ -2330,12 +2378,12 @@
                                     break;
                                 }
                             if (message.rdbNextSnapshotTime != null && message.hasOwnProperty("rdbNextSnapshotTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.rdbNextSnapshotTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.rdbNextSnapshotTime, long + 1);
                                 if (error)
                                     return "rdbNextSnapshotTime." + error;
                             }
                             if (message.rdbSnapshotStartTime != null && message.hasOwnProperty("rdbSnapshotStartTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.rdbSnapshotStartTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.rdbSnapshotStartTime, long + 1);
                                 if (error)
                                     return "rdbSnapshotStartTime." + error;
                             }
@@ -2350,9 +2398,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.PersistenceConfig} PersistenceConfig
                          */
-                        PersistenceConfig.fromObject = function fromObject(object) {
+                        PersistenceConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.PersistenceConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.PersistenceConfig();
                             switch (object.persistenceMode) {
                             default:
@@ -2405,12 +2457,12 @@
                             if (object.rdbNextSnapshotTime != null) {
                                 if (typeof object.rdbNextSnapshotTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.PersistenceConfig.rdbNextSnapshotTime: object expected");
-                                message.rdbNextSnapshotTime = $root.google.protobuf.Timestamp.fromObject(object.rdbNextSnapshotTime);
+                                message.rdbNextSnapshotTime = $root.google.protobuf.Timestamp.fromObject(object.rdbNextSnapshotTime, long + 1);
                             }
                             if (object.rdbSnapshotStartTime != null) {
                                 if (typeof object.rdbSnapshotStartTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.PersistenceConfig.rdbSnapshotStartTime: object expected");
-                                message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.fromObject(object.rdbSnapshotStartTime);
+                                message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.fromObject(object.rdbSnapshotStartTime, long + 1);
                             }
                             return message;
                         };
@@ -2532,7 +2584,7 @@
                         function RescheduleMaintenanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2617,9 +2669,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RescheduleMaintenanceRequest.decode = function decode(reader, length, error) {
+                        RescheduleMaintenanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.RescheduleMaintenanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2635,11 +2691,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.scheduleTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.scheduleTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2670,9 +2726,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RescheduleMaintenanceRequest.verify = function verify(message) {
+                        RescheduleMaintenanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -2687,7 +2747,7 @@
                                     break;
                                 }
                             if (message.scheduleTime != null && message.hasOwnProperty("scheduleTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.scheduleTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.scheduleTime, long + 1);
                                 if (error)
                                     return "scheduleTime." + error;
                             }
@@ -2702,9 +2762,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.RescheduleMaintenanceRequest} RescheduleMaintenanceRequest
                          */
-                        RescheduleMaintenanceRequest.fromObject = function fromObject(object) {
+                        RescheduleMaintenanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.RescheduleMaintenanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.RescheduleMaintenanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -2735,7 +2799,7 @@
                             if (object.scheduleTime != null) {
                                 if (typeof object.scheduleTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.RescheduleMaintenanceRequest.scheduleTime: object expected");
-                                message.scheduleTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleTime);
+                                message.scheduleTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleTime, long + 1);
                             }
                             return message;
                         };
@@ -2838,7 +2902,7 @@
                             this.weeklyMaintenanceWindow = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2934,9 +2998,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MaintenancePolicy.decode = function decode(reader, length, error) {
+                        MaintenancePolicy.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.MaintenancePolicy();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2944,11 +3012,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -2958,11 +3026,11 @@
                                 case 4: {
                                         if (!(message.weeklyMaintenanceWindow && message.weeklyMaintenanceWindow.length))
                                             message.weeklyMaintenanceWindow = [];
-                                        message.weeklyMaintenanceWindow.push($root.google.cloud.redis.v1.WeeklyMaintenanceWindow.decode(reader, reader.uint32()));
+                                        message.weeklyMaintenanceWindow.push($root.google.cloud.redis.v1.WeeklyMaintenanceWindow.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2993,16 +3061,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MaintenancePolicy.verify = function verify(message) {
+                        MaintenancePolicy.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -3013,7 +3085,7 @@
                                 if (!Array.isArray(message.weeklyMaintenanceWindow))
                                     return "weeklyMaintenanceWindow: array expected";
                                 for (var i = 0; i < message.weeklyMaintenanceWindow.length; ++i) {
-                                    var error = $root.google.cloud.redis.v1.WeeklyMaintenanceWindow.verify(message.weeklyMaintenanceWindow[i]);
+                                    var error = $root.google.cloud.redis.v1.WeeklyMaintenanceWindow.verify(message.weeklyMaintenanceWindow[i], long + 1);
                                     if (error)
                                         return "weeklyMaintenanceWindow." + error;
                                 }
@@ -3029,19 +3101,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.MaintenancePolicy} MaintenancePolicy
                          */
-                        MaintenancePolicy.fromObject = function fromObject(object) {
+                        MaintenancePolicy.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.MaintenancePolicy)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.MaintenancePolicy();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.MaintenancePolicy.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.MaintenancePolicy.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.description != null)
                                 message.description = String(object.description);
@@ -3052,7 +3128,7 @@
                                 for (var i = 0; i < object.weeklyMaintenanceWindow.length; ++i) {
                                     if (typeof object.weeklyMaintenanceWindow[i] !== "object")
                                         throw TypeError(".google.cloud.redis.v1.MaintenancePolicy.weeklyMaintenanceWindow: object expected");
-                                    message.weeklyMaintenanceWindow[i] = $root.google.cloud.redis.v1.WeeklyMaintenanceWindow.fromObject(object.weeklyMaintenanceWindow[i]);
+                                    message.weeklyMaintenanceWindow[i] = $root.google.cloud.redis.v1.WeeklyMaintenanceWindow.fromObject(object.weeklyMaintenanceWindow[i], long + 1);
                                 }
                             }
                             return message;
@@ -3143,7 +3219,7 @@
                         function WeeklyMaintenanceWindow(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3228,9 +3304,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        WeeklyMaintenanceWindow.decode = function decode(reader, length, error) {
+                        WeeklyMaintenanceWindow.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.WeeklyMaintenanceWindow();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3242,15 +3322,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32());
+                                        message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.duration = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.duration = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3281,9 +3361,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        WeeklyMaintenanceWindow.verify = function verify(message) {
+                        WeeklyMaintenanceWindow.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.day != null && message.hasOwnProperty("day"))
                                 switch (message.day) {
                                 default:
@@ -3299,12 +3383,12 @@
                                     break;
                                 }
                             if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                var error = $root.google.type.TimeOfDay.verify(message.startTime);
+                                var error = $root.google.type.TimeOfDay.verify(message.startTime, long + 1);
                                 if (error)
                                     return "startTime." + error;
                             }
                             if (message.duration != null && message.hasOwnProperty("duration")) {
-                                var error = $root.google.protobuf.Duration.verify(message.duration);
+                                var error = $root.google.protobuf.Duration.verify(message.duration, long + 1);
                                 if (error)
                                     return "duration." + error;
                             }
@@ -3319,9 +3403,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.WeeklyMaintenanceWindow} WeeklyMaintenanceWindow
                          */
-                        WeeklyMaintenanceWindow.fromObject = function fromObject(object) {
+                        WeeklyMaintenanceWindow.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.WeeklyMaintenanceWindow)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.WeeklyMaintenanceWindow();
                             switch (object.day) {
                             default:
@@ -3366,12 +3454,12 @@
                             if (object.startTime != null) {
                                 if (typeof object.startTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.WeeklyMaintenanceWindow.startTime: object expected");
-                                message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime);
+                                message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime, long + 1);
                             }
                             if (object.duration != null) {
                                 if (typeof object.duration !== "object")
                                     throw TypeError(".google.cloud.redis.v1.WeeklyMaintenanceWindow.duration: object expected");
-                                message.duration = $root.google.protobuf.Duration.fromObject(object.duration);
+                                message.duration = $root.google.protobuf.Duration.fromObject(object.duration, long + 1);
                             }
                             return message;
                         };
@@ -3455,7 +3543,7 @@
                         function MaintenanceSchedule(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3550,9 +3638,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MaintenanceSchedule.decode = function decode(reader, length, error) {
+                        MaintenanceSchedule.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.MaintenanceSchedule();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3560,11 +3652,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -3572,11 +3664,11 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.scheduleDeadlineTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.scheduleDeadlineTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3607,16 +3699,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MaintenanceSchedule.verify = function verify(message) {
+                        MaintenanceSchedule.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                 if (error)
                                     return "startTime." + error;
                             }
                             if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                 if (error)
                                     return "endTime." + error;
                             }
@@ -3624,7 +3720,7 @@
                                 if (typeof message.canReschedule !== "boolean")
                                     return "canReschedule: boolean expected";
                             if (message.scheduleDeadlineTime != null && message.hasOwnProperty("scheduleDeadlineTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.scheduleDeadlineTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.scheduleDeadlineTime, long + 1);
                                 if (error)
                                     return "scheduleDeadlineTime." + error;
                             }
@@ -3639,26 +3735,30 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.MaintenanceSchedule} MaintenanceSchedule
                          */
-                        MaintenanceSchedule.fromObject = function fromObject(object) {
+                        MaintenanceSchedule.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.MaintenanceSchedule)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.MaintenanceSchedule();
                             if (object.startTime != null) {
                                 if (typeof object.startTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.MaintenanceSchedule.startTime: object expected");
-                                message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                             }
                             if (object.endTime != null) {
                                 if (typeof object.endTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.MaintenanceSchedule.endTime: object expected");
-                                message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                             }
                             if (object.canReschedule != null)
                                 message.canReschedule = Boolean(object.canReschedule);
                             if (object.scheduleDeadlineTime != null) {
                                 if (typeof object.scheduleDeadlineTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.MaintenanceSchedule.scheduleDeadlineTime: object expected");
-                                message.scheduleDeadlineTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleDeadlineTime);
+                                message.scheduleDeadlineTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleDeadlineTime, long + 1);
                             }
                             return message;
                         };
@@ -3744,7 +3844,7 @@
                         function ListInstancesRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3829,9 +3929,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListInstancesRequest.decode = function decode(reader, length, error) {
+                        ListInstancesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.ListInstancesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3851,7 +3955,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3882,9 +3986,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListInstancesRequest.verify = function verify(message) {
+                        ListInstancesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -3905,9 +4013,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.ListInstancesRequest} ListInstancesRequest
                          */
-                        ListInstancesRequest.fromObject = function fromObject(object) {
+                        ListInstancesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.ListInstancesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.ListInstancesRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -3998,7 +4110,7 @@
                             this.unreachable = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4085,9 +4197,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListInstancesResponse.decode = function decode(reader, length, error) {
+                        ListInstancesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.ListInstancesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -4097,7 +4213,7 @@
                                 case 1: {
                                         if (!(message.instances && message.instances.length))
                                             message.instances = [];
-                                        message.instances.push($root.google.cloud.redis.v1.Instance.decode(reader, reader.uint32()));
+                                        message.instances.push($root.google.cloud.redis.v1.Instance.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -4111,7 +4227,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -4142,14 +4258,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListInstancesResponse.verify = function verify(message) {
+                        ListInstancesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.instances != null && message.hasOwnProperty("instances")) {
                                 if (!Array.isArray(message.instances))
                                     return "instances: array expected";
                                 for (var i = 0; i < message.instances.length; ++i) {
-                                    var error = $root.google.cloud.redis.v1.Instance.verify(message.instances[i]);
+                                    var error = $root.google.cloud.redis.v1.Instance.verify(message.instances[i], long + 1);
                                     if (error)
                                         return "instances." + error;
                                 }
@@ -4175,9 +4295,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.ListInstancesResponse} ListInstancesResponse
                          */
-                        ListInstancesResponse.fromObject = function fromObject(object) {
+                        ListInstancesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.ListInstancesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.ListInstancesResponse();
                             if (object.instances) {
                                 if (!Array.isArray(object.instances))
@@ -4186,7 +4310,7 @@
                                 for (var i = 0; i < object.instances.length; ++i) {
                                     if (typeof object.instances[i] !== "object")
                                         throw TypeError(".google.cloud.redis.v1.ListInstancesResponse.instances: object expected");
-                                    message.instances[i] = $root.google.cloud.redis.v1.Instance.fromObject(object.instances[i]);
+                                    message.instances[i] = $root.google.cloud.redis.v1.Instance.fromObject(object.instances[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -4284,7 +4408,7 @@
                         function GetInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4349,9 +4473,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetInstanceRequest.decode = function decode(reader, length, error) {
+                        GetInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.GetInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -4363,7 +4491,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -4394,9 +4522,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetInstanceRequest.verify = function verify(message) {
+                        GetInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -4411,9 +4543,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.GetInstanceRequest} GetInstanceRequest
                          */
-                        GetInstanceRequest.fromObject = function fromObject(object) {
+                        GetInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.GetInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.GetInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -4489,7 +4625,7 @@
                         function GetInstanceAuthStringRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4554,9 +4690,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetInstanceAuthStringRequest.decode = function decode(reader, length, error) {
+                        GetInstanceAuthStringRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.GetInstanceAuthStringRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -4568,7 +4708,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -4599,9 +4739,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetInstanceAuthStringRequest.verify = function verify(message) {
+                        GetInstanceAuthStringRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -4616,9 +4760,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.GetInstanceAuthStringRequest} GetInstanceAuthStringRequest
                          */
-                        GetInstanceAuthStringRequest.fromObject = function fromObject(object) {
+                        GetInstanceAuthStringRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.GetInstanceAuthStringRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.GetInstanceAuthStringRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -4694,7 +4842,7 @@
                         function InstanceAuthString(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4759,9 +4907,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        InstanceAuthString.decode = function decode(reader, length, error) {
+                        InstanceAuthString.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.InstanceAuthString();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -4773,7 +4925,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -4804,9 +4956,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        InstanceAuthString.verify = function verify(message) {
+                        InstanceAuthString.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.authString != null && message.hasOwnProperty("authString"))
                                 if (!$util.isString(message.authString))
                                     return "authString: string expected";
@@ -4821,9 +4977,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.InstanceAuthString} InstanceAuthString
                          */
-                        InstanceAuthString.fromObject = function fromObject(object) {
+                        InstanceAuthString.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.InstanceAuthString)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.InstanceAuthString();
                             if (object.authString != null)
                                 message.authString = String(object.authString);
@@ -4901,7 +5061,7 @@
                         function CreateInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4986,9 +5146,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateInstanceRequest.decode = function decode(reader, length, error) {
+                        CreateInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.CreateInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5004,11 +5168,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.instance = $root.google.cloud.redis.v1.Instance.decode(reader, reader.uint32());
+                                        message.instance = $root.google.cloud.redis.v1.Instance.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5039,9 +5203,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateInstanceRequest.verify = function verify(message) {
+                        CreateInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -5049,7 +5217,7 @@
                                 if (!$util.isString(message.instanceId))
                                     return "instanceId: string expected";
                             if (message.instance != null && message.hasOwnProperty("instance")) {
-                                var error = $root.google.cloud.redis.v1.Instance.verify(message.instance);
+                                var error = $root.google.cloud.redis.v1.Instance.verify(message.instance, long + 1);
                                 if (error)
                                     return "instance." + error;
                             }
@@ -5064,9 +5232,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.CreateInstanceRequest} CreateInstanceRequest
                          */
-                        CreateInstanceRequest.fromObject = function fromObject(object) {
+                        CreateInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.CreateInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.CreateInstanceRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -5075,7 +5247,7 @@
                             if (object.instance != null) {
                                 if (typeof object.instance !== "object")
                                     throw TypeError(".google.cloud.redis.v1.CreateInstanceRequest.instance: object expected");
-                                message.instance = $root.google.cloud.redis.v1.Instance.fromObject(object.instance);
+                                message.instance = $root.google.cloud.redis.v1.Instance.fromObject(object.instance, long + 1);
                             }
                             return message;
                         };
@@ -5157,7 +5329,7 @@
                         function UpdateInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5232,9 +5404,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateInstanceRequest.decode = function decode(reader, length, error) {
+                        UpdateInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.UpdateInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5242,15 +5418,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.instance = $root.google.cloud.redis.v1.Instance.decode(reader, reader.uint32());
+                                        message.instance = $root.google.cloud.redis.v1.Instance.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5281,16 +5457,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateInstanceRequest.verify = function verify(message) {
+                        UpdateInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
                             if (message.instance != null && message.hasOwnProperty("instance")) {
-                                var error = $root.google.cloud.redis.v1.Instance.verify(message.instance);
+                                var error = $root.google.cloud.redis.v1.Instance.verify(message.instance, long + 1);
                                 if (error)
                                     return "instance." + error;
                             }
@@ -5305,19 +5485,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.UpdateInstanceRequest} UpdateInstanceRequest
                          */
-                        UpdateInstanceRequest.fromObject = function fromObject(object) {
+                        UpdateInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.UpdateInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.UpdateInstanceRequest();
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.redis.v1.UpdateInstanceRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             if (object.instance != null) {
                                 if (typeof object.instance !== "object")
                                     throw TypeError(".google.cloud.redis.v1.UpdateInstanceRequest.instance: object expected");
-                                message.instance = $root.google.cloud.redis.v1.Instance.fromObject(object.instance);
+                                message.instance = $root.google.cloud.redis.v1.Instance.fromObject(object.instance, long + 1);
                             }
                             return message;
                         };
@@ -5396,7 +5580,7 @@
                         function UpgradeInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5471,9 +5655,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpgradeInstanceRequest.decode = function decode(reader, length, error) {
+                        UpgradeInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.UpgradeInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5489,7 +5677,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5520,9 +5708,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpgradeInstanceRequest.verify = function verify(message) {
+                        UpgradeInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -5540,9 +5732,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.UpgradeInstanceRequest} UpgradeInstanceRequest
                          */
-                        UpgradeInstanceRequest.fromObject = function fromObject(object) {
+                        UpgradeInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.UpgradeInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.UpgradeInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -5624,7 +5820,7 @@
                         function DeleteInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5689,9 +5885,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteInstanceRequest.decode = function decode(reader, length, error) {
+                        DeleteInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.DeleteInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5703,7 +5903,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5734,9 +5934,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteInstanceRequest.verify = function verify(message) {
+                        DeleteInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -5751,9 +5955,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.DeleteInstanceRequest} DeleteInstanceRequest
                          */
-                        DeleteInstanceRequest.fromObject = function fromObject(object) {
+                        DeleteInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.DeleteInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.DeleteInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -5829,7 +6037,7 @@
                         function GcsSource(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5894,9 +6102,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GcsSource.decode = function decode(reader, length, error) {
+                        GcsSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.GcsSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5908,7 +6120,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5939,9 +6151,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GcsSource.verify = function verify(message) {
+                        GcsSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.uri != null && message.hasOwnProperty("uri"))
                                 if (!$util.isString(message.uri))
                                     return "uri: string expected";
@@ -5956,9 +6172,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.GcsSource} GcsSource
                          */
-                        GcsSource.fromObject = function fromObject(object) {
+                        GcsSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.GcsSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.GcsSource();
                             if (object.uri != null)
                                 message.uri = String(object.uri);
@@ -6034,7 +6254,7 @@
                         function InputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -6113,9 +6333,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        InputConfig.decode = function decode(reader, length, error) {
+                        InputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.InputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -6123,11 +6347,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.gcsSource = $root.google.cloud.redis.v1.GcsSource.decode(reader, reader.uint32());
+                                        message.gcsSource = $root.google.cloud.redis.v1.GcsSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6158,14 +6382,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        InputConfig.verify = function verify(message) {
+                        InputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsSource != null && message.hasOwnProperty("gcsSource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.redis.v1.GcsSource.verify(message.gcsSource);
+                                    var error = $root.google.cloud.redis.v1.GcsSource.verify(message.gcsSource, long + 1);
                                     if (error)
                                         return "gcsSource." + error;
                                 }
@@ -6181,14 +6409,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.InputConfig} InputConfig
                          */
-                        InputConfig.fromObject = function fromObject(object) {
+                        InputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.InputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.InputConfig();
                             if (object.gcsSource != null) {
                                 if (typeof object.gcsSource !== "object")
                                     throw TypeError(".google.cloud.redis.v1.InputConfig.gcsSource: object expected");
-                                message.gcsSource = $root.google.cloud.redis.v1.GcsSource.fromObject(object.gcsSource);
+                                message.gcsSource = $root.google.cloud.redis.v1.GcsSource.fromObject(object.gcsSource, long + 1);
                             }
                             return message;
                         };
@@ -6264,7 +6496,7 @@
                         function ImportInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -6339,9 +6571,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportInstanceRequest.decode = function decode(reader, length, error) {
+                        ImportInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.ImportInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -6353,11 +6589,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.inputConfig = $root.google.cloud.redis.v1.InputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.redis.v1.InputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6388,14 +6624,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportInstanceRequest.verify = function verify(message) {
+                        ImportInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.redis.v1.InputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.redis.v1.InputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
@@ -6410,16 +6650,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.ImportInstanceRequest} ImportInstanceRequest
                          */
-                        ImportInstanceRequest.fromObject = function fromObject(object) {
+                        ImportInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.ImportInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.ImportInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.redis.v1.ImportInstanceRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.redis.v1.InputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.redis.v1.InputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             return message;
                         };
@@ -6497,7 +6741,7 @@
                         function GcsDestination(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -6562,9 +6806,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GcsDestination.decode = function decode(reader, length, error) {
+                        GcsDestination.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.GcsDestination();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -6576,7 +6824,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6607,9 +6855,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GcsDestination.verify = function verify(message) {
+                        GcsDestination.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.uri != null && message.hasOwnProperty("uri"))
                                 if (!$util.isString(message.uri))
                                     return "uri: string expected";
@@ -6624,9 +6876,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.GcsDestination} GcsDestination
                          */
-                        GcsDestination.fromObject = function fromObject(object) {
+                        GcsDestination.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.GcsDestination)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.GcsDestination();
                             if (object.uri != null)
                                 message.uri = String(object.uri);
@@ -6702,7 +6958,7 @@
                         function OutputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -6781,9 +7037,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        OutputConfig.decode = function decode(reader, length, error) {
+                        OutputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.OutputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -6791,11 +7051,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.gcsDestination = $root.google.cloud.redis.v1.GcsDestination.decode(reader, reader.uint32());
+                                        message.gcsDestination = $root.google.cloud.redis.v1.GcsDestination.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6826,14 +7086,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        OutputConfig.verify = function verify(message) {
+                        OutputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsDestination != null && message.hasOwnProperty("gcsDestination")) {
                                 properties.destination = 1;
                                 {
-                                    var error = $root.google.cloud.redis.v1.GcsDestination.verify(message.gcsDestination);
+                                    var error = $root.google.cloud.redis.v1.GcsDestination.verify(message.gcsDestination, long + 1);
                                     if (error)
                                         return "gcsDestination." + error;
                                 }
@@ -6849,14 +7113,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.OutputConfig} OutputConfig
                          */
-                        OutputConfig.fromObject = function fromObject(object) {
+                        OutputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.OutputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.OutputConfig();
                             if (object.gcsDestination != null) {
                                 if (typeof object.gcsDestination !== "object")
                                     throw TypeError(".google.cloud.redis.v1.OutputConfig.gcsDestination: object expected");
-                                message.gcsDestination = $root.google.cloud.redis.v1.GcsDestination.fromObject(object.gcsDestination);
+                                message.gcsDestination = $root.google.cloud.redis.v1.GcsDestination.fromObject(object.gcsDestination, long + 1);
                             }
                             return message;
                         };
@@ -6932,7 +7200,7 @@
                         function ExportInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7007,9 +7275,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportInstanceRequest.decode = function decode(reader, length, error) {
+                        ExportInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.ExportInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7021,11 +7293,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.outputConfig = $root.google.cloud.redis.v1.OutputConfig.decode(reader, reader.uint32());
+                                        message.outputConfig = $root.google.cloud.redis.v1.OutputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7056,14 +7328,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportInstanceRequest.verify = function verify(message) {
+                        ExportInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
                             if (message.outputConfig != null && message.hasOwnProperty("outputConfig")) {
-                                var error = $root.google.cloud.redis.v1.OutputConfig.verify(message.outputConfig);
+                                var error = $root.google.cloud.redis.v1.OutputConfig.verify(message.outputConfig, long + 1);
                                 if (error)
                                     return "outputConfig." + error;
                             }
@@ -7078,16 +7354,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.ExportInstanceRequest} ExportInstanceRequest
                          */
-                        ExportInstanceRequest.fromObject = function fromObject(object) {
+                        ExportInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.ExportInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.ExportInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
                             if (object.outputConfig != null) {
                                 if (typeof object.outputConfig !== "object")
                                     throw TypeError(".google.cloud.redis.v1.ExportInstanceRequest.outputConfig: object expected");
-                                message.outputConfig = $root.google.cloud.redis.v1.OutputConfig.fromObject(object.outputConfig);
+                                message.outputConfig = $root.google.cloud.redis.v1.OutputConfig.fromObject(object.outputConfig, long + 1);
                             }
                             return message;
                         };
@@ -7166,7 +7446,7 @@
                         function FailoverInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7241,9 +7521,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        FailoverInstanceRequest.decode = function decode(reader, length, error) {
+                        FailoverInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.FailoverInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7259,7 +7543,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7290,9 +7574,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        FailoverInstanceRequest.verify = function verify(message) {
+                        FailoverInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -7316,9 +7604,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.FailoverInstanceRequest} FailoverInstanceRequest
                          */
-                        FailoverInstanceRequest.fromObject = function fromObject(object) {
+                        FailoverInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.FailoverInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.FailoverInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -7440,7 +7732,7 @@
                         function OperationMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7565,9 +7857,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        OperationMetadata.decode = function decode(reader, length, error) {
+                        OperationMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.OperationMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7575,11 +7871,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -7603,7 +7899,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7634,16 +7930,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        OperationMetadata.verify = function verify(message) {
+                        OperationMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                 if (error)
                                     return "endTime." + error;
                             }
@@ -7673,19 +7973,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.OperationMetadata} OperationMetadata
                          */
-                        OperationMetadata.fromObject = function fromObject(object) {
+                        OperationMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.OperationMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.OperationMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.OperationMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.endTime != null) {
                                 if (typeof object.endTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.OperationMetadata.endTime: object expected");
-                                message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                             }
                             if (object.target != null)
                                 message.target = String(object.target);
@@ -7789,7 +8093,7 @@
                             this.availableZones = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7857,9 +8161,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        LocationMetadata.decode = function decode(reader, length, error) {
+                        LocationMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.LocationMetadata(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7879,18 +8187,20 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.redis.v1.ZoneMetadata.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.redis.v1.ZoneMetadata.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.availableZones, key);
                                         message.availableZones[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7921,15 +8231,19 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        LocationMetadata.verify = function verify(message) {
+                        LocationMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.availableZones != null && message.hasOwnProperty("availableZones")) {
                                 if (!$util.isObject(message.availableZones))
                                     return "availableZones: object expected";
                                 var key = Object.keys(message.availableZones);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.redis.v1.ZoneMetadata.verify(message.availableZones[key[i]]);
+                                    var error = $root.google.cloud.redis.v1.ZoneMetadata.verify(message.availableZones[key[i]], long + 1);
                                     if (error)
                                         return "availableZones." + error;
                                 }
@@ -7945,18 +8259,24 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.LocationMetadata} LocationMetadata
                          */
-                        LocationMetadata.fromObject = function fromObject(object) {
+                        LocationMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.LocationMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.LocationMetadata();
                             if (object.availableZones) {
                                 if (typeof object.availableZones !== "object")
                                     throw TypeError(".google.cloud.redis.v1.LocationMetadata.availableZones: object expected");
                                 message.availableZones = {};
                                 for (var keys = Object.keys(object.availableZones), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.availableZones, keys[i]);
                                     if (typeof object.availableZones[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.redis.v1.LocationMetadata.availableZones: object expected");
-                                    message.availableZones[keys[i]] = $root.google.cloud.redis.v1.ZoneMetadata.fromObject(object.availableZones[keys[i]]);
+                                    message.availableZones[keys[i]] = $root.google.cloud.redis.v1.ZoneMetadata.fromObject(object.availableZones[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -7980,8 +8300,11 @@
                             var keys2;
                             if (message.availableZones && (keys2 = Object.keys(message.availableZones)).length) {
                                 object.availableZones = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.availableZones, keys2[j]);
                                     object.availableZones[keys2[j]] = $root.google.cloud.redis.v1.ZoneMetadata.toObject(message.availableZones[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -8034,7 +8357,7 @@
                         function ZoneMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -8089,9 +8412,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ZoneMetadata.decode = function decode(reader, length, error) {
+                        ZoneMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.ZoneMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -8099,7 +8426,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -8130,9 +8457,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ZoneMetadata.verify = function verify(message) {
+                        ZoneMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -8144,9 +8475,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.ZoneMetadata} ZoneMetadata
                          */
-                        ZoneMetadata.fromObject = function fromObject(object) {
+                        ZoneMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.ZoneMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.redis.v1.ZoneMetadata();
                         };
     
@@ -8216,7 +8551,7 @@
                         function TlsCertificate(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -8321,9 +8656,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TlsCertificate.decode = function decode(reader, length, error) {
+                        TlsCertificate.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1.TlsCertificate();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -8339,11 +8678,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -8351,7 +8690,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -8382,9 +8721,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TlsCertificate.verify = function verify(message) {
+                        TlsCertificate.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.serialNumber != null && message.hasOwnProperty("serialNumber"))
                                 if (!$util.isString(message.serialNumber))
                                     return "serialNumber: string expected";
@@ -8392,12 +8735,12 @@
                                 if (!$util.isString(message.cert))
                                     return "cert: string expected";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                 if (error)
                                     return "expireTime." + error;
                             }
@@ -8415,9 +8758,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1.TlsCertificate} TlsCertificate
                          */
-                        TlsCertificate.fromObject = function fromObject(object) {
+                        TlsCertificate.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1.TlsCertificate)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1.TlsCertificate();
                             if (object.serialNumber != null)
                                 message.serialNumber = String(object.serialNumber);
@@ -8426,12 +8773,12 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.TlsCertificate.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1.TlsCertificate.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             if (object.sha1Fingerprint != null)
                                 message.sha1Fingerprint = String(object.sha1Fingerprint);
@@ -8931,7 +9278,7 @@
                         function NodeInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -9006,9 +9353,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        NodeInfo.decode = function decode(reader, length, error) {
+                        NodeInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.NodeInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -9024,7 +9375,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9055,9 +9406,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        NodeInfo.verify = function verify(message) {
+                        NodeInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.id != null && message.hasOwnProperty("id"))
                                 if (!$util.isString(message.id))
                                     return "id: string expected";
@@ -9075,9 +9430,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.NodeInfo} NodeInfo
                          */
-                        NodeInfo.fromObject = function fromObject(object) {
+                        NodeInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.NodeInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.NodeInfo();
                             if (object.id != null)
                                 message.id = String(object.id);
@@ -9193,7 +9552,7 @@
                             this.nodes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -9562,9 +9921,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Instance.decode = function decode(reader, length, error) {
+                        Instance.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.Instance(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -9595,10 +9958,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -9635,7 +10000,7 @@
                                         break;
                                     }
                                 case 13: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
@@ -9662,10 +10027,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.redisConfigs, key);
                                         message.redisConfigs[key] = value;
                                         break;
                                     }
@@ -9696,7 +10063,7 @@
                                 case 25: {
                                         if (!(message.serverCaCerts && message.serverCaCerts.length))
                                             message.serverCaCerts = [];
-                                        message.serverCaCerts.push($root.google.cloud.redis.v1beta1.TlsCertificate.decode(reader, reader.uint32()));
+                                        message.serverCaCerts.push($root.google.cloud.redis.v1beta1.TlsCertificate.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 26: {
@@ -9704,11 +10071,11 @@
                                         break;
                                     }
                                 case 27: {
-                                        message.maintenancePolicy = $root.google.cloud.redis.v1beta1.MaintenancePolicy.decode(reader, reader.uint32());
+                                        message.maintenancePolicy = $root.google.cloud.redis.v1beta1.MaintenancePolicy.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 28: {
-                                        message.maintenanceSchedule = $root.google.cloud.redis.v1beta1.MaintenanceSchedule.decode(reader, reader.uint32());
+                                        message.maintenanceSchedule = $root.google.cloud.redis.v1beta1.MaintenanceSchedule.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 31: {
@@ -9718,7 +10085,7 @@
                                 case 32: {
                                         if (!(message.nodes && message.nodes.length))
                                             message.nodes = [];
-                                        message.nodes.push($root.google.cloud.redis.v1beta1.NodeInfo.decode(reader, reader.uint32()));
+                                        message.nodes.push($root.google.cloud.redis.v1beta1.NodeInfo.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 33: {
@@ -9734,11 +10101,11 @@
                                         break;
                                     }
                                 case 37: {
-                                        message.persistenceConfig = $root.google.cloud.redis.v1beta1.PersistenceConfig.decode(reader, reader.uint32());
+                                        message.persistenceConfig = $root.google.cloud.redis.v1beta1.PersistenceConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9769,9 +10136,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Instance.verify = function verify(message) {
+                        Instance.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -9811,7 +10182,7 @@
                                 if (!$util.isString(message.currentLocationId))
                                     return "currentLocationId: string expected";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
@@ -9875,7 +10246,7 @@
                                 if (!Array.isArray(message.serverCaCerts))
                                     return "serverCaCerts: array expected";
                                 for (var i = 0; i < message.serverCaCerts.length; ++i) {
-                                    var error = $root.google.cloud.redis.v1beta1.TlsCertificate.verify(message.serverCaCerts[i]);
+                                    var error = $root.google.cloud.redis.v1beta1.TlsCertificate.verify(message.serverCaCerts[i], long + 1);
                                     if (error)
                                         return "serverCaCerts." + error;
                                 }
@@ -9890,12 +10261,12 @@
                                     break;
                                 }
                             if (message.maintenancePolicy != null && message.hasOwnProperty("maintenancePolicy")) {
-                                var error = $root.google.cloud.redis.v1beta1.MaintenancePolicy.verify(message.maintenancePolicy);
+                                var error = $root.google.cloud.redis.v1beta1.MaintenancePolicy.verify(message.maintenancePolicy, long + 1);
                                 if (error)
                                     return "maintenancePolicy." + error;
                             }
                             if (message.maintenanceSchedule != null && message.hasOwnProperty("maintenanceSchedule")) {
-                                var error = $root.google.cloud.redis.v1beta1.MaintenanceSchedule.verify(message.maintenanceSchedule);
+                                var error = $root.google.cloud.redis.v1beta1.MaintenanceSchedule.verify(message.maintenanceSchedule, long + 1);
                                 if (error)
                                     return "maintenanceSchedule." + error;
                             }
@@ -9906,7 +10277,7 @@
                                 if (!Array.isArray(message.nodes))
                                     return "nodes: array expected";
                                 for (var i = 0; i < message.nodes.length; ++i) {
-                                    var error = $root.google.cloud.redis.v1beta1.NodeInfo.verify(message.nodes[i]);
+                                    var error = $root.google.cloud.redis.v1beta1.NodeInfo.verify(message.nodes[i], long + 1);
                                     if (error)
                                         return "nodes." + error;
                                 }
@@ -9927,7 +10298,7 @@
                                     break;
                                 }
                             if (message.persistenceConfig != null && message.hasOwnProperty("persistenceConfig")) {
-                                var error = $root.google.cloud.redis.v1beta1.PersistenceConfig.verify(message.persistenceConfig);
+                                var error = $root.google.cloud.redis.v1beta1.PersistenceConfig.verify(message.persistenceConfig, long + 1);
                                 if (error)
                                     return "persistenceConfig." + error;
                             }
@@ -9942,9 +10313,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.Instance} Instance
                          */
-                        Instance.fromObject = function fromObject(object) {
+                        Instance.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.Instance)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.Instance();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -9954,8 +10329,11 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.Instance.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.locationId != null)
                                 message.locationId = String(object.locationId);
@@ -9976,7 +10354,7 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.Instance.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             switch (object.state) {
                             default:
@@ -10028,8 +10406,11 @@
                                 if (typeof object.redisConfigs !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.Instance.redisConfigs: object expected");
                                 message.redisConfigs = {};
-                                for (var keys = Object.keys(object.redisConfigs), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.redisConfigs), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.redisConfigs, keys[i]);
                                     message.redisConfigs[keys[i]] = String(object.redisConfigs[keys[i]]);
+                                }
                             }
                             switch (object.tier) {
                             default:
@@ -10086,7 +10467,7 @@
                                 for (var i = 0; i < object.serverCaCerts.length; ++i) {
                                     if (typeof object.serverCaCerts[i] !== "object")
                                         throw TypeError(".google.cloud.redis.v1beta1.Instance.serverCaCerts: object expected");
-                                    message.serverCaCerts[i] = $root.google.cloud.redis.v1beta1.TlsCertificate.fromObject(object.serverCaCerts[i]);
+                                    message.serverCaCerts[i] = $root.google.cloud.redis.v1beta1.TlsCertificate.fromObject(object.serverCaCerts[i], long + 1);
                                 }
                             }
                             switch (object.transitEncryptionMode) {
@@ -10112,12 +10493,12 @@
                             if (object.maintenancePolicy != null) {
                                 if (typeof object.maintenancePolicy !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.Instance.maintenancePolicy: object expected");
-                                message.maintenancePolicy = $root.google.cloud.redis.v1beta1.MaintenancePolicy.fromObject(object.maintenancePolicy);
+                                message.maintenancePolicy = $root.google.cloud.redis.v1beta1.MaintenancePolicy.fromObject(object.maintenancePolicy, long + 1);
                             }
                             if (object.maintenanceSchedule != null) {
                                 if (typeof object.maintenanceSchedule !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.Instance.maintenanceSchedule: object expected");
-                                message.maintenanceSchedule = $root.google.cloud.redis.v1beta1.MaintenanceSchedule.fromObject(object.maintenanceSchedule);
+                                message.maintenanceSchedule = $root.google.cloud.redis.v1beta1.MaintenanceSchedule.fromObject(object.maintenanceSchedule, long + 1);
                             }
                             if (object.replicaCount != null)
                                 message.replicaCount = object.replicaCount | 0;
@@ -10128,7 +10509,7 @@
                                 for (var i = 0; i < object.nodes.length; ++i) {
                                     if (typeof object.nodes[i] !== "object")
                                         throw TypeError(".google.cloud.redis.v1beta1.Instance.nodes: object expected");
-                                    message.nodes[i] = $root.google.cloud.redis.v1beta1.NodeInfo.fromObject(object.nodes[i]);
+                                    message.nodes[i] = $root.google.cloud.redis.v1beta1.NodeInfo.fromObject(object.nodes[i], long + 1);
                                 }
                             }
                             if (object.readEndpoint != null)
@@ -10158,7 +10539,7 @@
                             if (object.persistenceConfig != null) {
                                 if (typeof object.persistenceConfig !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.Instance.persistenceConfig: object expected");
-                                message.persistenceConfig = $root.google.cloud.redis.v1beta1.PersistenceConfig.fromObject(object.persistenceConfig);
+                                message.persistenceConfig = $root.google.cloud.redis.v1beta1.PersistenceConfig.fromObject(object.persistenceConfig, long + 1);
                             }
                             return message;
                         };
@@ -10220,8 +10601,11 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.locationId != null && message.hasOwnProperty("locationId"))
                                 object.locationId = message.locationId;
@@ -10245,8 +10629,11 @@
                                 object.statusMessage = message.statusMessage;
                             if (message.redisConfigs && (keys2 = Object.keys(message.redisConfigs)).length) {
                                 object.redisConfigs = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.redisConfigs, keys2[j]);
                                     object.redisConfigs[keys2[j]] = message.redisConfigs[keys2[j]];
+                                }
                             }
                             if (message.tier != null && message.hasOwnProperty("tier"))
                                 object.tier = options.enums === String ? $root.google.cloud.redis.v1beta1.Instance.Tier[message.tier] === undefined ? message.tier : $root.google.cloud.redis.v1beta1.Instance.Tier[message.tier] : message.tier;
@@ -10435,7 +10822,7 @@
                         function PersistenceConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10530,9 +10917,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PersistenceConfig.decode = function decode(reader, length, error) {
+                        PersistenceConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.PersistenceConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10548,15 +10939,15 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.rdbNextSnapshotTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.rdbNextSnapshotTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
-                                        message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10587,9 +10978,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PersistenceConfig.verify = function verify(message) {
+                        PersistenceConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.persistenceMode != null && message.hasOwnProperty("persistenceMode"))
                                 switch (message.persistenceMode) {
                                 default:
@@ -10611,12 +11006,12 @@
                                     break;
                                 }
                             if (message.rdbNextSnapshotTime != null && message.hasOwnProperty("rdbNextSnapshotTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.rdbNextSnapshotTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.rdbNextSnapshotTime, long + 1);
                                 if (error)
                                     return "rdbNextSnapshotTime." + error;
                             }
                             if (message.rdbSnapshotStartTime != null && message.hasOwnProperty("rdbSnapshotStartTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.rdbSnapshotStartTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.rdbSnapshotStartTime, long + 1);
                                 if (error)
                                     return "rdbSnapshotStartTime." + error;
                             }
@@ -10631,9 +11026,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.PersistenceConfig} PersistenceConfig
                          */
-                        PersistenceConfig.fromObject = function fromObject(object) {
+                        PersistenceConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.PersistenceConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.PersistenceConfig();
                             switch (object.persistenceMode) {
                             default:
@@ -10686,12 +11085,12 @@
                             if (object.rdbNextSnapshotTime != null) {
                                 if (typeof object.rdbNextSnapshotTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.PersistenceConfig.rdbNextSnapshotTime: object expected");
-                                message.rdbNextSnapshotTime = $root.google.protobuf.Timestamp.fromObject(object.rdbNextSnapshotTime);
+                                message.rdbNextSnapshotTime = $root.google.protobuf.Timestamp.fromObject(object.rdbNextSnapshotTime, long + 1);
                             }
                             if (object.rdbSnapshotStartTime != null) {
                                 if (typeof object.rdbSnapshotStartTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.PersistenceConfig.rdbSnapshotStartTime: object expected");
-                                message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.fromObject(object.rdbSnapshotStartTime);
+                                message.rdbSnapshotStartTime = $root.google.protobuf.Timestamp.fromObject(object.rdbSnapshotStartTime, long + 1);
                             }
                             return message;
                         };
@@ -10813,7 +11212,7 @@
                         function RescheduleMaintenanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10898,9 +11297,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RescheduleMaintenanceRequest.decode = function decode(reader, length, error) {
+                        RescheduleMaintenanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.RescheduleMaintenanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10916,11 +11319,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.scheduleTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.scheduleTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10951,9 +11354,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RescheduleMaintenanceRequest.verify = function verify(message) {
+                        RescheduleMaintenanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -10968,7 +11375,7 @@
                                     break;
                                 }
                             if (message.scheduleTime != null && message.hasOwnProperty("scheduleTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.scheduleTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.scheduleTime, long + 1);
                                 if (error)
                                     return "scheduleTime." + error;
                             }
@@ -10983,9 +11390,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.RescheduleMaintenanceRequest} RescheduleMaintenanceRequest
                          */
-                        RescheduleMaintenanceRequest.fromObject = function fromObject(object) {
+                        RescheduleMaintenanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.RescheduleMaintenanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.RescheduleMaintenanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -11016,7 +11427,7 @@
                             if (object.scheduleTime != null) {
                                 if (typeof object.scheduleTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.RescheduleMaintenanceRequest.scheduleTime: object expected");
-                                message.scheduleTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleTime);
+                                message.scheduleTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleTime, long + 1);
                             }
                             return message;
                         };
@@ -11119,7 +11530,7 @@
                             this.weeklyMaintenanceWindow = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11215,9 +11626,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MaintenancePolicy.decode = function decode(reader, length, error) {
+                        MaintenancePolicy.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.MaintenancePolicy();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11225,11 +11640,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -11239,11 +11654,11 @@
                                 case 4: {
                                         if (!(message.weeklyMaintenanceWindow && message.weeklyMaintenanceWindow.length))
                                             message.weeklyMaintenanceWindow = [];
-                                        message.weeklyMaintenanceWindow.push($root.google.cloud.redis.v1beta1.WeeklyMaintenanceWindow.decode(reader, reader.uint32()));
+                                        message.weeklyMaintenanceWindow.push($root.google.cloud.redis.v1beta1.WeeklyMaintenanceWindow.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11274,16 +11689,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MaintenancePolicy.verify = function verify(message) {
+                        MaintenancePolicy.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -11294,7 +11713,7 @@
                                 if (!Array.isArray(message.weeklyMaintenanceWindow))
                                     return "weeklyMaintenanceWindow: array expected";
                                 for (var i = 0; i < message.weeklyMaintenanceWindow.length; ++i) {
-                                    var error = $root.google.cloud.redis.v1beta1.WeeklyMaintenanceWindow.verify(message.weeklyMaintenanceWindow[i]);
+                                    var error = $root.google.cloud.redis.v1beta1.WeeklyMaintenanceWindow.verify(message.weeklyMaintenanceWindow[i], long + 1);
                                     if (error)
                                         return "weeklyMaintenanceWindow." + error;
                                 }
@@ -11310,19 +11729,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.MaintenancePolicy} MaintenancePolicy
                          */
-                        MaintenancePolicy.fromObject = function fromObject(object) {
+                        MaintenancePolicy.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.MaintenancePolicy)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.MaintenancePolicy();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.MaintenancePolicy.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.MaintenancePolicy.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.description != null)
                                 message.description = String(object.description);
@@ -11333,7 +11756,7 @@
                                 for (var i = 0; i < object.weeklyMaintenanceWindow.length; ++i) {
                                     if (typeof object.weeklyMaintenanceWindow[i] !== "object")
                                         throw TypeError(".google.cloud.redis.v1beta1.MaintenancePolicy.weeklyMaintenanceWindow: object expected");
-                                    message.weeklyMaintenanceWindow[i] = $root.google.cloud.redis.v1beta1.WeeklyMaintenanceWindow.fromObject(object.weeklyMaintenanceWindow[i]);
+                                    message.weeklyMaintenanceWindow[i] = $root.google.cloud.redis.v1beta1.WeeklyMaintenanceWindow.fromObject(object.weeklyMaintenanceWindow[i], long + 1);
                                 }
                             }
                             return message;
@@ -11424,7 +11847,7 @@
                         function WeeklyMaintenanceWindow(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11509,9 +11932,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        WeeklyMaintenanceWindow.decode = function decode(reader, length, error) {
+                        WeeklyMaintenanceWindow.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.WeeklyMaintenanceWindow();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11523,15 +11950,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32());
+                                        message.startTime = $root.google.type.TimeOfDay.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.duration = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.duration = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11562,9 +11989,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        WeeklyMaintenanceWindow.verify = function verify(message) {
+                        WeeklyMaintenanceWindow.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.day != null && message.hasOwnProperty("day"))
                                 switch (message.day) {
                                 default:
@@ -11580,12 +12011,12 @@
                                     break;
                                 }
                             if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                var error = $root.google.type.TimeOfDay.verify(message.startTime);
+                                var error = $root.google.type.TimeOfDay.verify(message.startTime, long + 1);
                                 if (error)
                                     return "startTime." + error;
                             }
                             if (message.duration != null && message.hasOwnProperty("duration")) {
-                                var error = $root.google.protobuf.Duration.verify(message.duration);
+                                var error = $root.google.protobuf.Duration.verify(message.duration, long + 1);
                                 if (error)
                                     return "duration." + error;
                             }
@@ -11600,9 +12031,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.WeeklyMaintenanceWindow} WeeklyMaintenanceWindow
                          */
-                        WeeklyMaintenanceWindow.fromObject = function fromObject(object) {
+                        WeeklyMaintenanceWindow.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.WeeklyMaintenanceWindow)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.WeeklyMaintenanceWindow();
                             switch (object.day) {
                             default:
@@ -11647,12 +12082,12 @@
                             if (object.startTime != null) {
                                 if (typeof object.startTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.WeeklyMaintenanceWindow.startTime: object expected");
-                                message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime);
+                                message.startTime = $root.google.type.TimeOfDay.fromObject(object.startTime, long + 1);
                             }
                             if (object.duration != null) {
                                 if (typeof object.duration !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.WeeklyMaintenanceWindow.duration: object expected");
-                                message.duration = $root.google.protobuf.Duration.fromObject(object.duration);
+                                message.duration = $root.google.protobuf.Duration.fromObject(object.duration, long + 1);
                             }
                             return message;
                         };
@@ -11736,7 +12171,7 @@
                         function MaintenanceSchedule(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11831,9 +12266,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MaintenanceSchedule.decode = function decode(reader, length, error) {
+                        MaintenanceSchedule.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.MaintenanceSchedule();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11841,11 +12280,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -11853,11 +12292,11 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.scheduleDeadlineTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.scheduleDeadlineTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11888,16 +12327,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MaintenanceSchedule.verify = function verify(message) {
+                        MaintenanceSchedule.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                 if (error)
                                     return "startTime." + error;
                             }
                             if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                 if (error)
                                     return "endTime." + error;
                             }
@@ -11905,7 +12348,7 @@
                                 if (typeof message.canReschedule !== "boolean")
                                     return "canReschedule: boolean expected";
                             if (message.scheduleDeadlineTime != null && message.hasOwnProperty("scheduleDeadlineTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.scheduleDeadlineTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.scheduleDeadlineTime, long + 1);
                                 if (error)
                                     return "scheduleDeadlineTime." + error;
                             }
@@ -11920,26 +12363,30 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.MaintenanceSchedule} MaintenanceSchedule
                          */
-                        MaintenanceSchedule.fromObject = function fromObject(object) {
+                        MaintenanceSchedule.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.MaintenanceSchedule)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.MaintenanceSchedule();
                             if (object.startTime != null) {
                                 if (typeof object.startTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.MaintenanceSchedule.startTime: object expected");
-                                message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                             }
                             if (object.endTime != null) {
                                 if (typeof object.endTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.MaintenanceSchedule.endTime: object expected");
-                                message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                             }
                             if (object.canReschedule != null)
                                 message.canReschedule = Boolean(object.canReschedule);
                             if (object.scheduleDeadlineTime != null) {
                                 if (typeof object.scheduleDeadlineTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.MaintenanceSchedule.scheduleDeadlineTime: object expected");
-                                message.scheduleDeadlineTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleDeadlineTime);
+                                message.scheduleDeadlineTime = $root.google.protobuf.Timestamp.fromObject(object.scheduleDeadlineTime, long + 1);
                             }
                             return message;
                         };
@@ -12025,7 +12472,7 @@
                         function ListInstancesRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12110,9 +12557,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListInstancesRequest.decode = function decode(reader, length, error) {
+                        ListInstancesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.ListInstancesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12132,7 +12583,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12163,9 +12614,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListInstancesRequest.verify = function verify(message) {
+                        ListInstancesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -12186,9 +12641,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.ListInstancesRequest} ListInstancesRequest
                          */
-                        ListInstancesRequest.fromObject = function fromObject(object) {
+                        ListInstancesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.ListInstancesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.ListInstancesRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -12279,7 +12738,7 @@
                             this.unreachable = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12366,9 +12825,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListInstancesResponse.decode = function decode(reader, length, error) {
+                        ListInstancesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.ListInstancesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12378,7 +12841,7 @@
                                 case 1: {
                                         if (!(message.instances && message.instances.length))
                                             message.instances = [];
-                                        message.instances.push($root.google.cloud.redis.v1beta1.Instance.decode(reader, reader.uint32()));
+                                        message.instances.push($root.google.cloud.redis.v1beta1.Instance.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -12392,7 +12855,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12423,14 +12886,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListInstancesResponse.verify = function verify(message) {
+                        ListInstancesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.instances != null && message.hasOwnProperty("instances")) {
                                 if (!Array.isArray(message.instances))
                                     return "instances: array expected";
                                 for (var i = 0; i < message.instances.length; ++i) {
-                                    var error = $root.google.cloud.redis.v1beta1.Instance.verify(message.instances[i]);
+                                    var error = $root.google.cloud.redis.v1beta1.Instance.verify(message.instances[i], long + 1);
                                     if (error)
                                         return "instances." + error;
                                 }
@@ -12456,9 +12923,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.ListInstancesResponse} ListInstancesResponse
                          */
-                        ListInstancesResponse.fromObject = function fromObject(object) {
+                        ListInstancesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.ListInstancesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.ListInstancesResponse();
                             if (object.instances) {
                                 if (!Array.isArray(object.instances))
@@ -12467,7 +12938,7 @@
                                 for (var i = 0; i < object.instances.length; ++i) {
                                     if (typeof object.instances[i] !== "object")
                                         throw TypeError(".google.cloud.redis.v1beta1.ListInstancesResponse.instances: object expected");
-                                    message.instances[i] = $root.google.cloud.redis.v1beta1.Instance.fromObject(object.instances[i]);
+                                    message.instances[i] = $root.google.cloud.redis.v1beta1.Instance.fromObject(object.instances[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -12565,7 +13036,7 @@
                         function GetInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12630,9 +13101,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetInstanceRequest.decode = function decode(reader, length, error) {
+                        GetInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.GetInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12644,7 +13119,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12675,9 +13150,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetInstanceRequest.verify = function verify(message) {
+                        GetInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -12692,9 +13171,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.GetInstanceRequest} GetInstanceRequest
                          */
-                        GetInstanceRequest.fromObject = function fromObject(object) {
+                        GetInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.GetInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.GetInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -12770,7 +13253,7 @@
                         function GetInstanceAuthStringRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12835,9 +13318,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetInstanceAuthStringRequest.decode = function decode(reader, length, error) {
+                        GetInstanceAuthStringRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.GetInstanceAuthStringRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12849,7 +13336,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12880,9 +13367,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetInstanceAuthStringRequest.verify = function verify(message) {
+                        GetInstanceAuthStringRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -12897,9 +13388,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.GetInstanceAuthStringRequest} GetInstanceAuthStringRequest
                          */
-                        GetInstanceAuthStringRequest.fromObject = function fromObject(object) {
+                        GetInstanceAuthStringRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.GetInstanceAuthStringRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.GetInstanceAuthStringRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -12975,7 +13470,7 @@
                         function InstanceAuthString(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13040,9 +13535,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        InstanceAuthString.decode = function decode(reader, length, error) {
+                        InstanceAuthString.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.InstanceAuthString();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13054,7 +13553,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13085,9 +13584,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        InstanceAuthString.verify = function verify(message) {
+                        InstanceAuthString.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.authString != null && message.hasOwnProperty("authString"))
                                 if (!$util.isString(message.authString))
                                     return "authString: string expected";
@@ -13102,9 +13605,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.InstanceAuthString} InstanceAuthString
                          */
-                        InstanceAuthString.fromObject = function fromObject(object) {
+                        InstanceAuthString.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.InstanceAuthString)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.InstanceAuthString();
                             if (object.authString != null)
                                 message.authString = String(object.authString);
@@ -13182,7 +13689,7 @@
                         function CreateInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13267,9 +13774,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateInstanceRequest.decode = function decode(reader, length, error) {
+                        CreateInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.CreateInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13285,11 +13796,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.instance = $root.google.cloud.redis.v1beta1.Instance.decode(reader, reader.uint32());
+                                        message.instance = $root.google.cloud.redis.v1beta1.Instance.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13320,9 +13831,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateInstanceRequest.verify = function verify(message) {
+                        CreateInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -13330,7 +13845,7 @@
                                 if (!$util.isString(message.instanceId))
                                     return "instanceId: string expected";
                             if (message.instance != null && message.hasOwnProperty("instance")) {
-                                var error = $root.google.cloud.redis.v1beta1.Instance.verify(message.instance);
+                                var error = $root.google.cloud.redis.v1beta1.Instance.verify(message.instance, long + 1);
                                 if (error)
                                     return "instance." + error;
                             }
@@ -13345,9 +13860,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.CreateInstanceRequest} CreateInstanceRequest
                          */
-                        CreateInstanceRequest.fromObject = function fromObject(object) {
+                        CreateInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.CreateInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.CreateInstanceRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -13356,7 +13875,7 @@
                             if (object.instance != null) {
                                 if (typeof object.instance !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.CreateInstanceRequest.instance: object expected");
-                                message.instance = $root.google.cloud.redis.v1beta1.Instance.fromObject(object.instance);
+                                message.instance = $root.google.cloud.redis.v1beta1.Instance.fromObject(object.instance, long + 1);
                             }
                             return message;
                         };
@@ -13438,7 +13957,7 @@
                         function UpdateInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13513,9 +14032,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateInstanceRequest.decode = function decode(reader, length, error) {
+                        UpdateInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.UpdateInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13523,15 +14046,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.instance = $root.google.cloud.redis.v1beta1.Instance.decode(reader, reader.uint32());
+                                        message.instance = $root.google.cloud.redis.v1beta1.Instance.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13562,16 +14085,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateInstanceRequest.verify = function verify(message) {
+                        UpdateInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
                             if (message.instance != null && message.hasOwnProperty("instance")) {
-                                var error = $root.google.cloud.redis.v1beta1.Instance.verify(message.instance);
+                                var error = $root.google.cloud.redis.v1beta1.Instance.verify(message.instance, long + 1);
                                 if (error)
                                     return "instance." + error;
                             }
@@ -13586,19 +14113,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.UpdateInstanceRequest} UpdateInstanceRequest
                          */
-                        UpdateInstanceRequest.fromObject = function fromObject(object) {
+                        UpdateInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.UpdateInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.UpdateInstanceRequest();
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.UpdateInstanceRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             if (object.instance != null) {
                                 if (typeof object.instance !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.UpdateInstanceRequest.instance: object expected");
-                                message.instance = $root.google.cloud.redis.v1beta1.Instance.fromObject(object.instance);
+                                message.instance = $root.google.cloud.redis.v1beta1.Instance.fromObject(object.instance, long + 1);
                             }
                             return message;
                         };
@@ -13677,7 +14208,7 @@
                         function UpgradeInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13752,9 +14283,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpgradeInstanceRequest.decode = function decode(reader, length, error) {
+                        UpgradeInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.UpgradeInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13770,7 +14305,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13801,9 +14336,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpgradeInstanceRequest.verify = function verify(message) {
+                        UpgradeInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -13821,9 +14360,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.UpgradeInstanceRequest} UpgradeInstanceRequest
                          */
-                        UpgradeInstanceRequest.fromObject = function fromObject(object) {
+                        UpgradeInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.UpgradeInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.UpgradeInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -13905,7 +14448,7 @@
                         function DeleteInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13970,9 +14513,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteInstanceRequest.decode = function decode(reader, length, error) {
+                        DeleteInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.DeleteInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13984,7 +14531,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14015,9 +14562,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteInstanceRequest.verify = function verify(message) {
+                        DeleteInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -14032,9 +14583,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.DeleteInstanceRequest} DeleteInstanceRequest
                          */
-                        DeleteInstanceRequest.fromObject = function fromObject(object) {
+                        DeleteInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.DeleteInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.DeleteInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -14110,7 +14665,7 @@
                         function GcsSource(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14175,9 +14730,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GcsSource.decode = function decode(reader, length, error) {
+                        GcsSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.GcsSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14189,7 +14748,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14220,9 +14779,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GcsSource.verify = function verify(message) {
+                        GcsSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.uri != null && message.hasOwnProperty("uri"))
                                 if (!$util.isString(message.uri))
                                     return "uri: string expected";
@@ -14237,9 +14800,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.GcsSource} GcsSource
                          */
-                        GcsSource.fromObject = function fromObject(object) {
+                        GcsSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.GcsSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.GcsSource();
                             if (object.uri != null)
                                 message.uri = String(object.uri);
@@ -14315,7 +14882,7 @@
                         function InputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14394,9 +14961,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        InputConfig.decode = function decode(reader, length, error) {
+                        InputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.InputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14404,11 +14975,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.gcsSource = $root.google.cloud.redis.v1beta1.GcsSource.decode(reader, reader.uint32());
+                                        message.gcsSource = $root.google.cloud.redis.v1beta1.GcsSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14439,14 +15010,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        InputConfig.verify = function verify(message) {
+                        InputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsSource != null && message.hasOwnProperty("gcsSource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.redis.v1beta1.GcsSource.verify(message.gcsSource);
+                                    var error = $root.google.cloud.redis.v1beta1.GcsSource.verify(message.gcsSource, long + 1);
                                     if (error)
                                         return "gcsSource." + error;
                                 }
@@ -14462,14 +15037,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.InputConfig} InputConfig
                          */
-                        InputConfig.fromObject = function fromObject(object) {
+                        InputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.InputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.InputConfig();
                             if (object.gcsSource != null) {
                                 if (typeof object.gcsSource !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.InputConfig.gcsSource: object expected");
-                                message.gcsSource = $root.google.cloud.redis.v1beta1.GcsSource.fromObject(object.gcsSource);
+                                message.gcsSource = $root.google.cloud.redis.v1beta1.GcsSource.fromObject(object.gcsSource, long + 1);
                             }
                             return message;
                         };
@@ -14545,7 +15124,7 @@
                         function ImportInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14620,9 +15199,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportInstanceRequest.decode = function decode(reader, length, error) {
+                        ImportInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.ImportInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14634,11 +15217,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.inputConfig = $root.google.cloud.redis.v1beta1.InputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.redis.v1beta1.InputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14669,14 +15252,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportInstanceRequest.verify = function verify(message) {
+                        ImportInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.redis.v1beta1.InputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.redis.v1beta1.InputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
@@ -14691,16 +15278,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.ImportInstanceRequest} ImportInstanceRequest
                          */
-                        ImportInstanceRequest.fromObject = function fromObject(object) {
+                        ImportInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.ImportInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.ImportInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.ImportInstanceRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.redis.v1beta1.InputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.redis.v1beta1.InputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             return message;
                         };
@@ -14778,7 +15369,7 @@
                         function GcsDestination(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14843,9 +15434,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GcsDestination.decode = function decode(reader, length, error) {
+                        GcsDestination.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.GcsDestination();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14857,7 +15452,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14888,9 +15483,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GcsDestination.verify = function verify(message) {
+                        GcsDestination.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.uri != null && message.hasOwnProperty("uri"))
                                 if (!$util.isString(message.uri))
                                     return "uri: string expected";
@@ -14905,9 +15504,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.GcsDestination} GcsDestination
                          */
-                        GcsDestination.fromObject = function fromObject(object) {
+                        GcsDestination.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.GcsDestination)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.GcsDestination();
                             if (object.uri != null)
                                 message.uri = String(object.uri);
@@ -14983,7 +15586,7 @@
                         function OutputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15062,9 +15665,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        OutputConfig.decode = function decode(reader, length, error) {
+                        OutputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.OutputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15072,11 +15679,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.gcsDestination = $root.google.cloud.redis.v1beta1.GcsDestination.decode(reader, reader.uint32());
+                                        message.gcsDestination = $root.google.cloud.redis.v1beta1.GcsDestination.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15107,14 +15714,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        OutputConfig.verify = function verify(message) {
+                        OutputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsDestination != null && message.hasOwnProperty("gcsDestination")) {
                                 properties.destination = 1;
                                 {
-                                    var error = $root.google.cloud.redis.v1beta1.GcsDestination.verify(message.gcsDestination);
+                                    var error = $root.google.cloud.redis.v1beta1.GcsDestination.verify(message.gcsDestination, long + 1);
                                     if (error)
                                         return "gcsDestination." + error;
                                 }
@@ -15130,14 +15741,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.OutputConfig} OutputConfig
                          */
-                        OutputConfig.fromObject = function fromObject(object) {
+                        OutputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.OutputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.OutputConfig();
                             if (object.gcsDestination != null) {
                                 if (typeof object.gcsDestination !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.OutputConfig.gcsDestination: object expected");
-                                message.gcsDestination = $root.google.cloud.redis.v1beta1.GcsDestination.fromObject(object.gcsDestination);
+                                message.gcsDestination = $root.google.cloud.redis.v1beta1.GcsDestination.fromObject(object.gcsDestination, long + 1);
                             }
                             return message;
                         };
@@ -15213,7 +15828,7 @@
                         function ExportInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15288,9 +15903,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportInstanceRequest.decode = function decode(reader, length, error) {
+                        ExportInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.ExportInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15302,11 +15921,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.outputConfig = $root.google.cloud.redis.v1beta1.OutputConfig.decode(reader, reader.uint32());
+                                        message.outputConfig = $root.google.cloud.redis.v1beta1.OutputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15337,14 +15956,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportInstanceRequest.verify = function verify(message) {
+                        ExportInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
                             if (message.outputConfig != null && message.hasOwnProperty("outputConfig")) {
-                                var error = $root.google.cloud.redis.v1beta1.OutputConfig.verify(message.outputConfig);
+                                var error = $root.google.cloud.redis.v1beta1.OutputConfig.verify(message.outputConfig, long + 1);
                                 if (error)
                                     return "outputConfig." + error;
                             }
@@ -15359,16 +15982,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.ExportInstanceRequest} ExportInstanceRequest
                          */
-                        ExportInstanceRequest.fromObject = function fromObject(object) {
+                        ExportInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.ExportInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.ExportInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
                             if (object.outputConfig != null) {
                                 if (typeof object.outputConfig !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.ExportInstanceRequest.outputConfig: object expected");
-                                message.outputConfig = $root.google.cloud.redis.v1beta1.OutputConfig.fromObject(object.outputConfig);
+                                message.outputConfig = $root.google.cloud.redis.v1beta1.OutputConfig.fromObject(object.outputConfig, long + 1);
                             }
                             return message;
                         };
@@ -15447,7 +16074,7 @@
                         function FailoverInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15522,9 +16149,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        FailoverInstanceRequest.decode = function decode(reader, length, error) {
+                        FailoverInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.FailoverInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15540,7 +16171,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15571,9 +16202,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        FailoverInstanceRequest.verify = function verify(message) {
+                        FailoverInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -15597,9 +16232,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.FailoverInstanceRequest} FailoverInstanceRequest
                          */
-                        FailoverInstanceRequest.fromObject = function fromObject(object) {
+                        FailoverInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.FailoverInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.FailoverInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -15716,7 +16355,7 @@
                             this.availableZones = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15784,9 +16423,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        LocationMetadata.decode = function decode(reader, length, error) {
+                        LocationMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.LocationMetadata(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15806,18 +16449,20 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.redis.v1beta1.ZoneMetadata.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.redis.v1beta1.ZoneMetadata.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.availableZones, key);
                                         message.availableZones[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15848,15 +16493,19 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        LocationMetadata.verify = function verify(message) {
+                        LocationMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.availableZones != null && message.hasOwnProperty("availableZones")) {
                                 if (!$util.isObject(message.availableZones))
                                     return "availableZones: object expected";
                                 var key = Object.keys(message.availableZones);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.redis.v1beta1.ZoneMetadata.verify(message.availableZones[key[i]]);
+                                    var error = $root.google.cloud.redis.v1beta1.ZoneMetadata.verify(message.availableZones[key[i]], long + 1);
                                     if (error)
                                         return "availableZones." + error;
                                 }
@@ -15872,18 +16521,24 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.LocationMetadata} LocationMetadata
                          */
-                        LocationMetadata.fromObject = function fromObject(object) {
+                        LocationMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.LocationMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.LocationMetadata();
                             if (object.availableZones) {
                                 if (typeof object.availableZones !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.LocationMetadata.availableZones: object expected");
                                 message.availableZones = {};
                                 for (var keys = Object.keys(object.availableZones), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.availableZones, keys[i]);
                                     if (typeof object.availableZones[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.redis.v1beta1.LocationMetadata.availableZones: object expected");
-                                    message.availableZones[keys[i]] = $root.google.cloud.redis.v1beta1.ZoneMetadata.fromObject(object.availableZones[keys[i]]);
+                                    message.availableZones[keys[i]] = $root.google.cloud.redis.v1beta1.ZoneMetadata.fromObject(object.availableZones[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -15907,8 +16562,11 @@
                             var keys2;
                             if (message.availableZones && (keys2 = Object.keys(message.availableZones)).length) {
                                 object.availableZones = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.availableZones, keys2[j]);
                                     object.availableZones[keys2[j]] = $root.google.cloud.redis.v1beta1.ZoneMetadata.toObject(message.availableZones[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -15961,7 +16619,7 @@
                         function ZoneMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16016,9 +16674,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ZoneMetadata.decode = function decode(reader, length, error) {
+                        ZoneMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.ZoneMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16026,7 +16688,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16057,9 +16719,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ZoneMetadata.verify = function verify(message) {
+                        ZoneMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -16071,9 +16737,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.ZoneMetadata} ZoneMetadata
                          */
-                        ZoneMetadata.fromObject = function fromObject(object) {
+                        ZoneMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.ZoneMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.redis.v1beta1.ZoneMetadata();
                         };
     
@@ -16143,7 +16813,7 @@
                         function TlsCertificate(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16248,9 +16918,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TlsCertificate.decode = function decode(reader, length, error) {
+                        TlsCertificate.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.redis.v1beta1.TlsCertificate();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16266,11 +16940,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -16278,7 +16952,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16309,9 +16983,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TlsCertificate.verify = function verify(message) {
+                        TlsCertificate.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.serialNumber != null && message.hasOwnProperty("serialNumber"))
                                 if (!$util.isString(message.serialNumber))
                                     return "serialNumber: string expected";
@@ -16319,12 +16997,12 @@
                                 if (!$util.isString(message.cert))
                                     return "cert: string expected";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                 if (error)
                                     return "expireTime." + error;
                             }
@@ -16342,9 +17020,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.redis.v1beta1.TlsCertificate} TlsCertificate
                          */
-                        TlsCertificate.fromObject = function fromObject(object) {
+                        TlsCertificate.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.redis.v1beta1.TlsCertificate)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.redis.v1beta1.TlsCertificate();
                             if (object.serialNumber != null)
                                 message.serialNumber = String(object.serialNumber);
@@ -16353,12 +17035,12 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.TlsCertificate.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.redis.v1beta1.TlsCertificate.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             if (object.sha1Fingerprint != null)
                                 message.sha1Fingerprint = String(object.sha1Fingerprint);
@@ -16467,7 +17149,7 @@
                     this.rules = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -16543,9 +17225,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Http.decode = function decode(reader, length, error) {
+                Http.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Http();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -16555,7 +17241,7 @@
                         case 1: {
                                 if (!(message.rules && message.rules.length))
                                     message.rules = [];
-                                message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32()));
+                                message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
@@ -16563,7 +17249,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -16594,14 +17280,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Http.verify = function verify(message) {
+                Http.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.rules != null && message.hasOwnProperty("rules")) {
                         if (!Array.isArray(message.rules))
                             return "rules: array expected";
                         for (var i = 0; i < message.rules.length; ++i) {
-                            var error = $root.google.api.HttpRule.verify(message.rules[i]);
+                            var error = $root.google.api.HttpRule.verify(message.rules[i], long + 1);
                             if (error)
                                 return "rules." + error;
                         }
@@ -16620,9 +17310,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.Http} Http
                  */
-                Http.fromObject = function fromObject(object) {
+                Http.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.Http)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.Http();
                     if (object.rules) {
                         if (!Array.isArray(object.rules))
@@ -16631,7 +17325,7 @@
                         for (var i = 0; i < object.rules.length; ++i) {
                             if (typeof object.rules[i] !== "object")
                                 throw TypeError(".google.api.Http.rules: object expected");
-                            message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i]);
+                            message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i], long + 1);
                         }
                     }
                     if (object.fullyDecodeReservedExpansion != null)
@@ -16725,7 +17419,7 @@
                     this.additionalBindings = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -16895,9 +17589,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                HttpRule.decode = function decode(reader, length, error) {
+                HttpRule.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.HttpRule();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -16929,7 +17627,7 @@
                                 break;
                             }
                         case 8: {
-                                message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32());
+                                message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 7: {
@@ -16943,11 +17641,11 @@
                         case 11: {
                                 if (!(message.additionalBindings && message.additionalBindings.length))
                                     message.additionalBindings = [];
-                                message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32()));
+                                message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -16978,9 +17676,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                HttpRule.verify = function verify(message) {
+                HttpRule.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.selector != null && message.hasOwnProperty("selector"))
                         if (!$util.isString(message.selector))
@@ -17023,7 +17725,7 @@
                             return "pattern: multiple values";
                         properties.pattern = 1;
                         {
-                            var error = $root.google.api.CustomHttpPattern.verify(message.custom);
+                            var error = $root.google.api.CustomHttpPattern.verify(message.custom, long + 1);
                             if (error)
                                 return "custom." + error;
                         }
@@ -17038,7 +17740,7 @@
                         if (!Array.isArray(message.additionalBindings))
                             return "additionalBindings: array expected";
                         for (var i = 0; i < message.additionalBindings.length; ++i) {
-                            var error = $root.google.api.HttpRule.verify(message.additionalBindings[i]);
+                            var error = $root.google.api.HttpRule.verify(message.additionalBindings[i], long + 1);
                             if (error)
                                 return "additionalBindings." + error;
                         }
@@ -17054,9 +17756,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.HttpRule} HttpRule
                  */
-                HttpRule.fromObject = function fromObject(object) {
+                HttpRule.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.HttpRule)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.HttpRule();
                     if (object.selector != null)
                         message.selector = String(object.selector);
@@ -17073,7 +17779,7 @@
                     if (object.custom != null) {
                         if (typeof object.custom !== "object")
                             throw TypeError(".google.api.HttpRule.custom: object expected");
-                        message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom);
+                        message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom, long + 1);
                     }
                     if (object.body != null)
                         message.body = String(object.body);
@@ -17086,7 +17792,7 @@
                         for (var i = 0; i < object.additionalBindings.length; ++i) {
                             if (typeof object.additionalBindings[i] !== "object")
                                 throw TypeError(".google.api.HttpRule.additionalBindings: object expected");
-                            message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i]);
+                            message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i], long + 1);
                         }
                     }
                     return message;
@@ -17206,7 +17912,7 @@
                 function CustomHttpPattern(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -17281,9 +17987,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CustomHttpPattern.decode = function decode(reader, length, error) {
+                CustomHttpPattern.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CustomHttpPattern();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -17299,7 +18009,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -17330,9 +18040,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CustomHttpPattern.verify = function verify(message) {
+                CustomHttpPattern.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.kind != null && message.hasOwnProperty("kind"))
                         if (!$util.isString(message.kind))
                             return "kind: string expected";
@@ -17350,9 +18064,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CustomHttpPattern} CustomHttpPattern
                  */
-                CustomHttpPattern.fromObject = function fromObject(object) {
+                CustomHttpPattern.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CustomHttpPattern)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CustomHttpPattern();
                     if (object.kind != null)
                         message.kind = String(object.kind);
@@ -17437,7 +18155,7 @@
                     this.destinations = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -17526,9 +18244,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CommonLanguageSettings.decode = function decode(reader, length, error) {
+                CommonLanguageSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CommonLanguageSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -17551,11 +18273,11 @@
                                 break;
                             }
                         case 3: {
-                                message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.decode(reader, reader.uint32());
+                                message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -17586,9 +18308,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CommonLanguageSettings.verify = function verify(message) {
+                CommonLanguageSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.referenceDocsUri != null && message.hasOwnProperty("referenceDocsUri"))
                         if (!$util.isString(message.referenceDocsUri))
                             return "referenceDocsUri: string expected";
@@ -17606,7 +18332,7 @@
                             }
                     }
                     if (message.selectiveGapicGeneration != null && message.hasOwnProperty("selectiveGapicGeneration")) {
-                        var error = $root.google.api.SelectiveGapicGeneration.verify(message.selectiveGapicGeneration);
+                        var error = $root.google.api.SelectiveGapicGeneration.verify(message.selectiveGapicGeneration, long + 1);
                         if (error)
                             return "selectiveGapicGeneration." + error;
                     }
@@ -17621,9 +18347,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CommonLanguageSettings} CommonLanguageSettings
                  */
-                CommonLanguageSettings.fromObject = function fromObject(object) {
+                CommonLanguageSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CommonLanguageSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CommonLanguageSettings();
                     if (object.referenceDocsUri != null)
                         message.referenceDocsUri = String(object.referenceDocsUri);
@@ -17655,7 +18385,7 @@
                     if (object.selectiveGapicGeneration != null) {
                         if (typeof object.selectiveGapicGeneration !== "object")
                             throw TypeError(".google.api.CommonLanguageSettings.selectiveGapicGeneration: object expected");
-                        message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.fromObject(object.selectiveGapicGeneration);
+                        message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.fromObject(object.selectiveGapicGeneration, long + 1);
                     }
                     return message;
                 };
@@ -17750,7 +18480,7 @@
                 function ClientLibrarySettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -17915,9 +18645,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ClientLibrarySettings.decode = function decode(reader, length, error) {
+                ClientLibrarySettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ClientLibrarySettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -17937,39 +18671,39 @@
                                 break;
                             }
                         case 21: {
-                                message.javaSettings = $root.google.api.JavaSettings.decode(reader, reader.uint32());
+                                message.javaSettings = $root.google.api.JavaSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 22: {
-                                message.cppSettings = $root.google.api.CppSettings.decode(reader, reader.uint32());
+                                message.cppSettings = $root.google.api.CppSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 23: {
-                                message.phpSettings = $root.google.api.PhpSettings.decode(reader, reader.uint32());
+                                message.phpSettings = $root.google.api.PhpSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 24: {
-                                message.pythonSettings = $root.google.api.PythonSettings.decode(reader, reader.uint32());
+                                message.pythonSettings = $root.google.api.PythonSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 25: {
-                                message.nodeSettings = $root.google.api.NodeSettings.decode(reader, reader.uint32());
+                                message.nodeSettings = $root.google.api.NodeSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 26: {
-                                message.dotnetSettings = $root.google.api.DotnetSettings.decode(reader, reader.uint32());
+                                message.dotnetSettings = $root.google.api.DotnetSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 27: {
-                                message.rubySettings = $root.google.api.RubySettings.decode(reader, reader.uint32());
+                                message.rubySettings = $root.google.api.RubySettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 28: {
-                                message.goSettings = $root.google.api.GoSettings.decode(reader, reader.uint32());
+                                message.goSettings = $root.google.api.GoSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -18000,9 +18734,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ClientLibrarySettings.verify = function verify(message) {
+                ClientLibrarySettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.version != null && message.hasOwnProperty("version"))
                         if (!$util.isString(message.version))
                             return "version: string expected";
@@ -18024,42 +18762,42 @@
                         if (typeof message.restNumericEnums !== "boolean")
                             return "restNumericEnums: boolean expected";
                     if (message.javaSettings != null && message.hasOwnProperty("javaSettings")) {
-                        var error = $root.google.api.JavaSettings.verify(message.javaSettings);
+                        var error = $root.google.api.JavaSettings.verify(message.javaSettings, long + 1);
                         if (error)
                             return "javaSettings." + error;
                     }
                     if (message.cppSettings != null && message.hasOwnProperty("cppSettings")) {
-                        var error = $root.google.api.CppSettings.verify(message.cppSettings);
+                        var error = $root.google.api.CppSettings.verify(message.cppSettings, long + 1);
                         if (error)
                             return "cppSettings." + error;
                     }
                     if (message.phpSettings != null && message.hasOwnProperty("phpSettings")) {
-                        var error = $root.google.api.PhpSettings.verify(message.phpSettings);
+                        var error = $root.google.api.PhpSettings.verify(message.phpSettings, long + 1);
                         if (error)
                             return "phpSettings." + error;
                     }
                     if (message.pythonSettings != null && message.hasOwnProperty("pythonSettings")) {
-                        var error = $root.google.api.PythonSettings.verify(message.pythonSettings);
+                        var error = $root.google.api.PythonSettings.verify(message.pythonSettings, long + 1);
                         if (error)
                             return "pythonSettings." + error;
                     }
                     if (message.nodeSettings != null && message.hasOwnProperty("nodeSettings")) {
-                        var error = $root.google.api.NodeSettings.verify(message.nodeSettings);
+                        var error = $root.google.api.NodeSettings.verify(message.nodeSettings, long + 1);
                         if (error)
                             return "nodeSettings." + error;
                     }
                     if (message.dotnetSettings != null && message.hasOwnProperty("dotnetSettings")) {
-                        var error = $root.google.api.DotnetSettings.verify(message.dotnetSettings);
+                        var error = $root.google.api.DotnetSettings.verify(message.dotnetSettings, long + 1);
                         if (error)
                             return "dotnetSettings." + error;
                     }
                     if (message.rubySettings != null && message.hasOwnProperty("rubySettings")) {
-                        var error = $root.google.api.RubySettings.verify(message.rubySettings);
+                        var error = $root.google.api.RubySettings.verify(message.rubySettings, long + 1);
                         if (error)
                             return "rubySettings." + error;
                     }
                     if (message.goSettings != null && message.hasOwnProperty("goSettings")) {
-                        var error = $root.google.api.GoSettings.verify(message.goSettings);
+                        var error = $root.google.api.GoSettings.verify(message.goSettings, long + 1);
                         if (error)
                             return "goSettings." + error;
                     }
@@ -18074,9 +18812,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ClientLibrarySettings} ClientLibrarySettings
                  */
-                ClientLibrarySettings.fromObject = function fromObject(object) {
+                ClientLibrarySettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ClientLibrarySettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ClientLibrarySettings();
                     if (object.version != null)
                         message.version = String(object.version);
@@ -18125,42 +18867,42 @@
                     if (object.javaSettings != null) {
                         if (typeof object.javaSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.javaSettings: object expected");
-                        message.javaSettings = $root.google.api.JavaSettings.fromObject(object.javaSettings);
+                        message.javaSettings = $root.google.api.JavaSettings.fromObject(object.javaSettings, long + 1);
                     }
                     if (object.cppSettings != null) {
                         if (typeof object.cppSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.cppSettings: object expected");
-                        message.cppSettings = $root.google.api.CppSettings.fromObject(object.cppSettings);
+                        message.cppSettings = $root.google.api.CppSettings.fromObject(object.cppSettings, long + 1);
                     }
                     if (object.phpSettings != null) {
                         if (typeof object.phpSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.phpSettings: object expected");
-                        message.phpSettings = $root.google.api.PhpSettings.fromObject(object.phpSettings);
+                        message.phpSettings = $root.google.api.PhpSettings.fromObject(object.phpSettings, long + 1);
                     }
                     if (object.pythonSettings != null) {
                         if (typeof object.pythonSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.pythonSettings: object expected");
-                        message.pythonSettings = $root.google.api.PythonSettings.fromObject(object.pythonSettings);
+                        message.pythonSettings = $root.google.api.PythonSettings.fromObject(object.pythonSettings, long + 1);
                     }
                     if (object.nodeSettings != null) {
                         if (typeof object.nodeSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.nodeSettings: object expected");
-                        message.nodeSettings = $root.google.api.NodeSettings.fromObject(object.nodeSettings);
+                        message.nodeSettings = $root.google.api.NodeSettings.fromObject(object.nodeSettings, long + 1);
                     }
                     if (object.dotnetSettings != null) {
                         if (typeof object.dotnetSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.dotnetSettings: object expected");
-                        message.dotnetSettings = $root.google.api.DotnetSettings.fromObject(object.dotnetSettings);
+                        message.dotnetSettings = $root.google.api.DotnetSettings.fromObject(object.dotnetSettings, long + 1);
                     }
                     if (object.rubySettings != null) {
                         if (typeof object.rubySettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.rubySettings: object expected");
-                        message.rubySettings = $root.google.api.RubySettings.fromObject(object.rubySettings);
+                        message.rubySettings = $root.google.api.RubySettings.fromObject(object.rubySettings, long + 1);
                     }
                     if (object.goSettings != null) {
                         if (typeof object.goSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.goSettings: object expected");
-                        message.goSettings = $root.google.api.GoSettings.fromObject(object.goSettings);
+                        message.goSettings = $root.google.api.GoSettings.fromObject(object.goSettings, long + 1);
                     }
                     return message;
                 };
@@ -18278,7 +19020,7 @@
                     this.librarySettings = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -18446,9 +19188,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Publishing.decode = function decode(reader, length, error) {
+                Publishing.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Publishing();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -18458,7 +19204,7 @@
                         case 2: {
                                 if (!(message.methodSettings && message.methodSettings.length))
                                     message.methodSettings = [];
-                                message.methodSettings.push($root.google.api.MethodSettings.decode(reader, reader.uint32()));
+                                message.methodSettings.push($root.google.api.MethodSettings.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 101: {
@@ -18494,7 +19240,7 @@
                         case 109: {
                                 if (!(message.librarySettings && message.librarySettings.length))
                                     message.librarySettings = [];
-                                message.librarySettings.push($root.google.api.ClientLibrarySettings.decode(reader, reader.uint32()));
+                                message.librarySettings.push($root.google.api.ClientLibrarySettings.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 110: {
@@ -18506,7 +19252,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -18537,14 +19283,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Publishing.verify = function verify(message) {
+                Publishing.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.methodSettings != null && message.hasOwnProperty("methodSettings")) {
                         if (!Array.isArray(message.methodSettings))
                             return "methodSettings: array expected";
                         for (var i = 0; i < message.methodSettings.length; ++i) {
-                            var error = $root.google.api.MethodSettings.verify(message.methodSettings[i]);
+                            var error = $root.google.api.MethodSettings.verify(message.methodSettings[i], long + 1);
                             if (error)
                                 return "methodSettings." + error;
                         }
@@ -18589,7 +19339,7 @@
                         if (!Array.isArray(message.librarySettings))
                             return "librarySettings: array expected";
                         for (var i = 0; i < message.librarySettings.length; ++i) {
-                            var error = $root.google.api.ClientLibrarySettings.verify(message.librarySettings[i]);
+                            var error = $root.google.api.ClientLibrarySettings.verify(message.librarySettings[i], long + 1);
                             if (error)
                                 return "librarySettings." + error;
                         }
@@ -18611,9 +19361,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.Publishing} Publishing
                  */
-                Publishing.fromObject = function fromObject(object) {
+                Publishing.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.Publishing)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.Publishing();
                     if (object.methodSettings) {
                         if (!Array.isArray(object.methodSettings))
@@ -18622,7 +19376,7 @@
                         for (var i = 0; i < object.methodSettings.length; ++i) {
                             if (typeof object.methodSettings[i] !== "object")
                                 throw TypeError(".google.api.Publishing.methodSettings: object expected");
-                            message.methodSettings[i] = $root.google.api.MethodSettings.fromObject(object.methodSettings[i]);
+                            message.methodSettings[i] = $root.google.api.MethodSettings.fromObject(object.methodSettings[i], long + 1);
                         }
                     }
                     if (object.newIssueUri != null)
@@ -18689,7 +19443,7 @@
                         for (var i = 0; i < object.librarySettings.length; ++i) {
                             if (typeof object.librarySettings[i] !== "object")
                                 throw TypeError(".google.api.Publishing.librarySettings: object expected");
-                            message.librarySettings[i] = $root.google.api.ClientLibrarySettings.fromObject(object.librarySettings[i]);
+                            message.librarySettings[i] = $root.google.api.ClientLibrarySettings.fromObject(object.librarySettings[i], long + 1);
                         }
                     }
                     if (object.protoReferenceDocumentationUri != null)
@@ -18813,7 +19567,7 @@
                     this.serviceClassNames = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -18899,9 +19653,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                JavaSettings.decode = function decode(reader, length, error) {
+                JavaSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.JavaSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -18928,19 +19686,21 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.serviceClassNames, key);
                                 message.serviceClassNames[key] = value;
                                 break;
                             }
                         case 3: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -18971,9 +19731,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                JavaSettings.verify = function verify(message) {
+                JavaSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.libraryPackage != null && message.hasOwnProperty("libraryPackage"))
                         if (!$util.isString(message.libraryPackage))
                             return "libraryPackage: string expected";
@@ -18986,7 +19750,7 @@
                                 return "serviceClassNames: string{k:string} expected";
                     }
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -19001,9 +19765,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.JavaSettings} JavaSettings
                  */
-                JavaSettings.fromObject = function fromObject(object) {
+                JavaSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.JavaSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.JavaSettings();
                     if (object.libraryPackage != null)
                         message.libraryPackage = String(object.libraryPackage);
@@ -19011,13 +19779,16 @@
                         if (typeof object.serviceClassNames !== "object")
                             throw TypeError(".google.api.JavaSettings.serviceClassNames: object expected");
                         message.serviceClassNames = {};
-                        for (var keys = Object.keys(object.serviceClassNames), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.serviceClassNames), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.serviceClassNames, keys[i]);
                             message.serviceClassNames[keys[i]] = String(object.serviceClassNames[keys[i]]);
+                        }
                     }
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.JavaSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -19046,8 +19817,11 @@
                     var keys2;
                     if (message.serviceClassNames && (keys2 = Object.keys(message.serviceClassNames)).length) {
                         object.serviceClassNames = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.serviceClassNames, keys2[j]);
                             object.serviceClassNames[keys2[j]] = message.serviceClassNames[keys2[j]];
+                        }
                     }
                     if (message.common != null && message.hasOwnProperty("common"))
                         object.common = $root.google.api.CommonLanguageSettings.toObject(message.common, options);
@@ -19103,7 +19877,7 @@
                 function CppSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -19168,9 +19942,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CppSettings.decode = function decode(reader, length, error) {
+                CppSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CppSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -19178,11 +19956,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -19213,11 +19991,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CppSettings.verify = function verify(message) {
+                CppSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -19232,14 +20014,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CppSettings} CppSettings
                  */
-                CppSettings.fromObject = function fromObject(object) {
+                CppSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CppSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CppSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.CppSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -19313,7 +20099,7 @@
                 function PhpSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -19378,9 +20164,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                PhpSettings.decode = function decode(reader, length, error) {
+                PhpSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PhpSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -19388,11 +20178,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -19423,11 +20213,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                PhpSettings.verify = function verify(message) {
+                PhpSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -19442,14 +20236,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.PhpSettings} PhpSettings
                  */
-                PhpSettings.fromObject = function fromObject(object) {
+                PhpSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.PhpSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.PhpSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.PhpSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -19524,7 +20322,7 @@
                 function PythonSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -19599,9 +20397,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                PythonSettings.decode = function decode(reader, length, error) {
+                PythonSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PythonSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -19609,15 +20411,15 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
-                                message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.decode(reader, reader.uint32());
+                                message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -19648,16 +20450,20 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                PythonSettings.verify = function verify(message) {
+                PythonSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
                     if (message.experimentalFeatures != null && message.hasOwnProperty("experimentalFeatures")) {
-                        var error = $root.google.api.PythonSettings.ExperimentalFeatures.verify(message.experimentalFeatures);
+                        var error = $root.google.api.PythonSettings.ExperimentalFeatures.verify(message.experimentalFeatures, long + 1);
                         if (error)
                             return "experimentalFeatures." + error;
                     }
@@ -19672,19 +20478,23 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.PythonSettings} PythonSettings
                  */
-                PythonSettings.fromObject = function fromObject(object) {
+                PythonSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.PythonSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.PythonSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.PythonSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.experimentalFeatures != null) {
                         if (typeof object.experimentalFeatures !== "object")
                             throw TypeError(".google.api.PythonSettings.experimentalFeatures: object expected");
-                        message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.fromObject(object.experimentalFeatures);
+                        message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.fromObject(object.experimentalFeatures, long + 1);
                     }
                     return message;
                 };
@@ -19761,7 +20571,7 @@
                     function ExperimentalFeatures(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -19846,9 +20656,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ExperimentalFeatures.decode = function decode(reader, length, error) {
+                    ExperimentalFeatures.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PythonSettings.ExperimentalFeatures();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -19868,7 +20682,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -19899,9 +20713,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ExperimentalFeatures.verify = function verify(message) {
+                    ExperimentalFeatures.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.restAsyncIoEnabled != null && message.hasOwnProperty("restAsyncIoEnabled"))
                             if (typeof message.restAsyncIoEnabled !== "boolean")
                                 return "restAsyncIoEnabled: boolean expected";
@@ -19922,9 +20740,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.api.PythonSettings.ExperimentalFeatures} ExperimentalFeatures
                      */
-                    ExperimentalFeatures.fromObject = function fromObject(object) {
+                    ExperimentalFeatures.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.api.PythonSettings.ExperimentalFeatures)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.api.PythonSettings.ExperimentalFeatures();
                         if (object.restAsyncIoEnabled != null)
                             message.restAsyncIoEnabled = Boolean(object.restAsyncIoEnabled);
@@ -20014,7 +20836,7 @@
                 function NodeSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -20079,9 +20901,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                NodeSettings.decode = function decode(reader, length, error) {
+                NodeSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.NodeSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -20089,11 +20915,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -20124,11 +20950,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                NodeSettings.verify = function verify(message) {
+                NodeSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -20143,14 +20973,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.NodeSettings} NodeSettings
                  */
-                NodeSettings.fromObject = function fromObject(object) {
+                NodeSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.NodeSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.NodeSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.NodeSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -20234,7 +21068,7 @@
                     this.handwrittenSignatures = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -20354,9 +21188,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DotnetSettings.decode = function decode(reader, length, error) {
+                DotnetSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.DotnetSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -20364,7 +21202,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
@@ -20383,10 +21221,12 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedServices, key);
                                 message.renamedServices[key] = value;
                                 break;
                             }
@@ -20406,10 +21246,12 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedResources, key);
                                 message.renamedResources[key] = value;
                                 break;
                             }
@@ -20432,7 +21274,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -20463,11 +21305,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DotnetSettings.verify = function verify(message) {
+                DotnetSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -20519,28 +21365,38 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.DotnetSettings} DotnetSettings
                  */
-                DotnetSettings.fromObject = function fromObject(object) {
+                DotnetSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.DotnetSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.DotnetSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.DotnetSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.renamedServices) {
                         if (typeof object.renamedServices !== "object")
                             throw TypeError(".google.api.DotnetSettings.renamedServices: object expected");
                         message.renamedServices = {};
-                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedServices, keys[i]);
                             message.renamedServices[keys[i]] = String(object.renamedServices[keys[i]]);
+                        }
                     }
                     if (object.renamedResources) {
                         if (typeof object.renamedResources !== "object")
                             throw TypeError(".google.api.DotnetSettings.renamedResources: object expected");
                         message.renamedResources = {};
-                        for (var keys = Object.keys(object.renamedResources), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedResources), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedResources, keys[i]);
                             message.renamedResources[keys[i]] = String(object.renamedResources[keys[i]]);
+                        }
                     }
                     if (object.ignoredResources) {
                         if (!Array.isArray(object.ignoredResources))
@@ -20595,13 +21451,19 @@
                     var keys2;
                     if (message.renamedServices && (keys2 = Object.keys(message.renamedServices)).length) {
                         object.renamedServices = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedServices, keys2[j]);
                             object.renamedServices[keys2[j]] = message.renamedServices[keys2[j]];
+                        }
                     }
                     if (message.renamedResources && (keys2 = Object.keys(message.renamedResources)).length) {
                         object.renamedResources = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedResources, keys2[j]);
                             object.renamedResources[keys2[j]] = message.renamedResources[keys2[j]];
+                        }
                     }
                     if (message.ignoredResources && message.ignoredResources.length) {
                         object.ignoredResources = [];
@@ -20670,7 +21532,7 @@
                 function RubySettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -20735,9 +21597,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                RubySettings.decode = function decode(reader, length, error) {
+                RubySettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.RubySettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -20745,11 +21611,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -20780,11 +21646,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                RubySettings.verify = function verify(message) {
+                RubySettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -20799,14 +21669,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.RubySettings} RubySettings
                  */
-                RubySettings.fromObject = function fromObject(object) {
+                RubySettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.RubySettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.RubySettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.RubySettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -20882,7 +21756,7 @@
                     this.renamedServices = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -20958,9 +21832,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GoSettings.decode = function decode(reader, length, error) {
+                GoSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.GoSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -20968,7 +21846,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
@@ -20987,15 +21865,17 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedServices, key);
                                 message.renamedServices[key] = value;
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -21026,11 +21906,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GoSettings.verify = function verify(message) {
+                GoSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -21053,21 +21937,28 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.GoSettings} GoSettings
                  */
-                GoSettings.fromObject = function fromObject(object) {
+                GoSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.GoSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.GoSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.GoSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.renamedServices) {
                         if (typeof object.renamedServices !== "object")
                             throw TypeError(".google.api.GoSettings.renamedServices: object expected");
                         message.renamedServices = {};
-                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedServices, keys[i]);
                             message.renamedServices[keys[i]] = String(object.renamedServices[keys[i]]);
+                        }
                     }
                     return message;
                 };
@@ -21094,8 +21985,11 @@
                     var keys2;
                     if (message.renamedServices && (keys2 = Object.keys(message.renamedServices)).length) {
                         object.renamedServices = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedServices, keys2[j]);
                             object.renamedServices[keys2[j]] = message.renamedServices[keys2[j]];
+                        }
                     }
                     return object;
                 };
@@ -21152,7 +22046,7 @@
                     this.autoPopulatedFields = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -21238,9 +22132,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodSettings.decode = function decode(reader, length, error) {
+                MethodSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.MethodSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -21252,7 +22150,7 @@
                                 break;
                             }
                         case 2: {
-                                message.longRunning = $root.google.api.MethodSettings.LongRunning.decode(reader, reader.uint32());
+                                message.longRunning = $root.google.api.MethodSettings.LongRunning.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -21262,7 +22160,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -21293,14 +22191,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodSettings.verify = function verify(message) {
+                MethodSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.selector != null && message.hasOwnProperty("selector"))
                         if (!$util.isString(message.selector))
                             return "selector: string expected";
                     if (message.longRunning != null && message.hasOwnProperty("longRunning")) {
-                        var error = $root.google.api.MethodSettings.LongRunning.verify(message.longRunning);
+                        var error = $root.google.api.MethodSettings.LongRunning.verify(message.longRunning, long + 1);
                         if (error)
                             return "longRunning." + error;
                     }
@@ -21322,16 +22224,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.MethodSettings} MethodSettings
                  */
-                MethodSettings.fromObject = function fromObject(object) {
+                MethodSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.MethodSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.MethodSettings();
                     if (object.selector != null)
                         message.selector = String(object.selector);
                     if (object.longRunning != null) {
                         if (typeof object.longRunning !== "object")
                             throw TypeError(".google.api.MethodSettings.longRunning: object expected");
-                        message.longRunning = $root.google.api.MethodSettings.LongRunning.fromObject(object.longRunning);
+                        message.longRunning = $root.google.api.MethodSettings.LongRunning.fromObject(object.longRunning, long + 1);
                     }
                     if (object.autoPopulatedFields) {
                         if (!Array.isArray(object.autoPopulatedFields))
@@ -21423,7 +22329,7 @@
                     function LongRunning(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -21518,9 +22424,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    LongRunning.decode = function decode(reader, length, error) {
+                    LongRunning.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.MethodSettings.LongRunning();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -21528,7 +22438,7 @@
                                 break;
                             switch (tag >>> 3) {
                             case 1: {
-                                    message.initialPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.initialPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 2: {
@@ -21536,15 +22446,15 @@
                                     break;
                                 }
                             case 3: {
-                                    message.maxPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.maxPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 4: {
-                                    message.totalPollTimeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.totalPollTimeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -21575,11 +22485,15 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    LongRunning.verify = function verify(message) {
+                    LongRunning.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.initialPollDelay != null && message.hasOwnProperty("initialPollDelay")) {
-                            var error = $root.google.protobuf.Duration.verify(message.initialPollDelay);
+                            var error = $root.google.protobuf.Duration.verify(message.initialPollDelay, long + 1);
                             if (error)
                                 return "initialPollDelay." + error;
                         }
@@ -21587,12 +22501,12 @@
                             if (typeof message.pollDelayMultiplier !== "number")
                                 return "pollDelayMultiplier: number expected";
                         if (message.maxPollDelay != null && message.hasOwnProperty("maxPollDelay")) {
-                            var error = $root.google.protobuf.Duration.verify(message.maxPollDelay);
+                            var error = $root.google.protobuf.Duration.verify(message.maxPollDelay, long + 1);
                             if (error)
                                 return "maxPollDelay." + error;
                         }
                         if (message.totalPollTimeout != null && message.hasOwnProperty("totalPollTimeout")) {
-                            var error = $root.google.protobuf.Duration.verify(message.totalPollTimeout);
+                            var error = $root.google.protobuf.Duration.verify(message.totalPollTimeout, long + 1);
                             if (error)
                                 return "totalPollTimeout." + error;
                         }
@@ -21607,26 +22521,30 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.api.MethodSettings.LongRunning} LongRunning
                      */
-                    LongRunning.fromObject = function fromObject(object) {
+                    LongRunning.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.api.MethodSettings.LongRunning)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.api.MethodSettings.LongRunning();
                         if (object.initialPollDelay != null) {
                             if (typeof object.initialPollDelay !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.initialPollDelay: object expected");
-                            message.initialPollDelay = $root.google.protobuf.Duration.fromObject(object.initialPollDelay);
+                            message.initialPollDelay = $root.google.protobuf.Duration.fromObject(object.initialPollDelay, long + 1);
                         }
                         if (object.pollDelayMultiplier != null)
                             message.pollDelayMultiplier = Number(object.pollDelayMultiplier);
                         if (object.maxPollDelay != null) {
                             if (typeof object.maxPollDelay !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.maxPollDelay: object expected");
-                            message.maxPollDelay = $root.google.protobuf.Duration.fromObject(object.maxPollDelay);
+                            message.maxPollDelay = $root.google.protobuf.Duration.fromObject(object.maxPollDelay, long + 1);
                         }
                         if (object.totalPollTimeout != null) {
                             if (typeof object.totalPollTimeout !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.totalPollTimeout: object expected");
-                            message.totalPollTimeout = $root.google.protobuf.Duration.fromObject(object.totalPollTimeout);
+                            message.totalPollTimeout = $root.google.protobuf.Duration.fromObject(object.totalPollTimeout, long + 1);
                         }
                         return message;
                     };
@@ -21757,7 +22675,7 @@
                     this.methods = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -21833,9 +22751,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                SelectiveGapicGeneration.decode = function decode(reader, length, error) {
+                SelectiveGapicGeneration.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.SelectiveGapicGeneration();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -21853,7 +22775,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -21884,9 +22806,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                SelectiveGapicGeneration.verify = function verify(message) {
+                SelectiveGapicGeneration.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.methods != null && message.hasOwnProperty("methods")) {
                         if (!Array.isArray(message.methods))
                             return "methods: array expected";
@@ -21908,9 +22834,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.SelectiveGapicGeneration} SelectiveGapicGeneration
                  */
-                SelectiveGapicGeneration.fromObject = function fromObject(object) {
+                SelectiveGapicGeneration.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.SelectiveGapicGeneration)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.SelectiveGapicGeneration();
                     if (object.methods) {
                         if (!Array.isArray(object.methods))
@@ -22062,7 +22992,7 @@
                     this.style = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -22192,9 +23122,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ResourceDescriptor.decode = function decode(reader, length, error) {
+                ResourceDescriptor.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceDescriptor();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -22239,7 +23173,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -22270,9 +23204,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ResourceDescriptor.verify = function verify(message) {
+                ResourceDescriptor.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type != null && message.hasOwnProperty("type"))
                         if (!$util.isString(message.type))
                             return "type: string expected";
@@ -22324,9 +23262,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ResourceDescriptor} ResourceDescriptor
                  */
-                ResourceDescriptor.fromObject = function fromObject(object) {
+                ResourceDescriptor.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ResourceDescriptor)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ResourceDescriptor();
                     if (object.type != null)
                         message.type = String(object.type);
@@ -22514,7 +23456,7 @@
                 function ResourceReference(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -22589,9 +23531,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ResourceReference.decode = function decode(reader, length, error) {
+                ResourceReference.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceReference();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -22607,7 +23553,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -22638,9 +23584,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ResourceReference.verify = function verify(message) {
+                ResourceReference.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type != null && message.hasOwnProperty("type"))
                         if (!$util.isString(message.type))
                             return "type: string expected";
@@ -22658,9 +23608,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ResourceReference} ResourceReference
                  */
-                ResourceReference.fromObject = function fromObject(object) {
+                ResourceReference.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ResourceReference)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ResourceReference();
                     if (object.type != null)
                         message.type = String(object.type);
@@ -22755,7 +23709,7 @@
                     this.file = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -22821,9 +23775,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileDescriptorSet.decode = function decode(reader, length, error) {
+                FileDescriptorSet.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorSet();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -22833,11 +23791,11 @@
                         case 1: {
                                 if (!(message.file && message.file.length))
                                     message.file = [];
-                                message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32()));
+                                message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -22868,14 +23826,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileDescriptorSet.verify = function verify(message) {
+                FileDescriptorSet.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.file != null && message.hasOwnProperty("file")) {
                         if (!Array.isArray(message.file))
                             return "file: array expected";
                         for (var i = 0; i < message.file.length; ++i) {
-                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i]);
+                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i], long + 1);
                             if (error)
                                 return "file." + error;
                         }
@@ -22891,9 +23853,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet
                  */
-                FileDescriptorSet.fromObject = function fromObject(object) {
+                FileDescriptorSet.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileDescriptorSet)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileDescriptorSet();
                     if (object.file) {
                         if (!Array.isArray(object.file))
@@ -22902,7 +23868,7 @@
                         for (var i = 0; i < object.file.length; ++i) {
                             if (typeof object.file[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorSet.file: object expected");
-                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i]);
+                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i], long + 1);
                         }
                     }
                     return message;
@@ -23035,7 +24001,7 @@
                     this.extension = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -23238,9 +24204,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileDescriptorProto.decode = function decode(reader, length, error) {
+                FileDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -23292,33 +24262,33 @@
                         case 4: {
                                 if (!(message.messageType && message.messageType.length))
                                     message.messageType = [];
-                                message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
+                                message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
                                 if (!(message.enumType && message.enumType.length))
                                     message.enumType = [];
-                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
+                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 6: {
                                 if (!(message.service && message.service.length))
                                     message.service = [];
-                                message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32()));
+                                message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 7: {
                                 if (!(message.extension && message.extension.length))
                                     message.extension = [];
-                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 8: {
-                                message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 9: {
-                                message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32());
+                                message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 12: {
@@ -23330,7 +24300,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -23361,9 +24331,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileDescriptorProto.verify = function verify(message) {
+                FileDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -23402,7 +24376,7 @@
                         if (!Array.isArray(message.messageType))
                             return "messageType: array expected";
                         for (var i = 0; i < message.messageType.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i]);
+                            var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i], long + 1);
                             if (error)
                                 return "messageType." + error;
                         }
@@ -23411,7 +24385,7 @@
                         if (!Array.isArray(message.enumType))
                             return "enumType: array expected";
                         for (var i = 0; i < message.enumType.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i], long + 1);
                             if (error)
                                 return "enumType." + error;
                         }
@@ -23420,7 +24394,7 @@
                         if (!Array.isArray(message.service))
                             return "service: array expected";
                         for (var i = 0; i < message.service.length; ++i) {
-                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i]);
+                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i], long + 1);
                             if (error)
                                 return "service." + error;
                         }
@@ -23429,18 +24403,18 @@
                         if (!Array.isArray(message.extension))
                             return "extension: array expected";
                         for (var i = 0; i < message.extension.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i], long + 1);
                             if (error)
                                 return "extension." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.FileOptions.verify(message.options);
+                        var error = $root.google.protobuf.FileOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
                     if (message.sourceCodeInfo != null && message.hasOwnProperty("sourceCodeInfo")) {
-                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo);
+                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo, long + 1);
                         if (error)
                             return "sourceCodeInfo." + error;
                     }
@@ -23476,9 +24450,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto
                  */
-                FileDescriptorProto.fromObject = function fromObject(object) {
+                FileDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -23519,7 +24497,7 @@
                         for (var i = 0; i < object.messageType.length; ++i) {
                             if (typeof object.messageType[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.messageType: object expected");
-                            message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i]);
+                            message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i], long + 1);
                         }
                     }
                     if (object.enumType) {
@@ -23529,7 +24507,7 @@
                         for (var i = 0; i < object.enumType.length; ++i) {
                             if (typeof object.enumType[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.enumType: object expected");
-                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]);
+                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i], long + 1);
                         }
                     }
                     if (object.service) {
@@ -23539,7 +24517,7 @@
                         for (var i = 0; i < object.service.length; ++i) {
                             if (typeof object.service[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.service: object expected");
-                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i]);
+                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i], long + 1);
                         }
                     }
                     if (object.extension) {
@@ -23549,18 +24527,18 @@
                         for (var i = 0; i < object.extension.length; ++i) {
                             if (typeof object.extension[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.extension: object expected");
-                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
+                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.FileDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options, long + 1);
                     }
                     if (object.sourceCodeInfo != null) {
                         if (typeof object.sourceCodeInfo !== "object")
                             throw TypeError(".google.protobuf.FileDescriptorProto.sourceCodeInfo: object expected");
-                        message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo);
+                        message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo, long + 1);
                     }
                     if (object.syntax != null)
                         message.syntax = String(object.syntax);
@@ -23776,7 +24754,7 @@
                     this.reservedName = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -23949,9 +24927,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DescriptorProto.decode = function decode(reader, length, error) {
+                DescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -23965,47 +24947,47 @@
                         case 2: {
                                 if (!(message.field && message.field.length))
                                     message.field = [];
-                                message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 6: {
                                 if (!(message.extension && message.extension.length))
                                     message.extension = [];
-                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
                                 if (!(message.nestedType && message.nestedType.length))
                                     message.nestedType = [];
-                                message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
+                                message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 4: {
                                 if (!(message.enumType && message.enumType.length))
                                     message.enumType = [];
-                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
+                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
                                 if (!(message.extensionRange && message.extensionRange.length))
                                     message.extensionRange = [];
-                                message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32()));
+                                message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 8: {
                                 if (!(message.oneofDecl && message.oneofDecl.length))
                                     message.oneofDecl = [];
-                                message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32()));
+                                message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 7: {
-                                message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 9: {
                                 if (!(message.reservedRange && message.reservedRange.length))
                                     message.reservedRange = [];
-                                message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32()));
+                                message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 10: {
@@ -24019,7 +25001,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -24050,9 +25032,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DescriptorProto.verify = function verify(message) {
+                DescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -24060,7 +25046,7 @@
                         if (!Array.isArray(message.field))
                             return "field: array expected";
                         for (var i = 0; i < message.field.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i], long + 1);
                             if (error)
                                 return "field." + error;
                         }
@@ -24069,7 +25055,7 @@
                         if (!Array.isArray(message.extension))
                             return "extension: array expected";
                         for (var i = 0; i < message.extension.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i], long + 1);
                             if (error)
                                 return "extension." + error;
                         }
@@ -24078,7 +25064,7 @@
                         if (!Array.isArray(message.nestedType))
                             return "nestedType: array expected";
                         for (var i = 0; i < message.nestedType.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i]);
+                            var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i], long + 1);
                             if (error)
                                 return "nestedType." + error;
                         }
@@ -24087,7 +25073,7 @@
                         if (!Array.isArray(message.enumType))
                             return "enumType: array expected";
                         for (var i = 0; i < message.enumType.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i], long + 1);
                             if (error)
                                 return "enumType." + error;
                         }
@@ -24096,7 +25082,7 @@
                         if (!Array.isArray(message.extensionRange))
                             return "extensionRange: array expected";
                         for (var i = 0; i < message.extensionRange.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i]);
+                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i], long + 1);
                             if (error)
                                 return "extensionRange." + error;
                         }
@@ -24105,13 +25091,13 @@
                         if (!Array.isArray(message.oneofDecl))
                             return "oneofDecl: array expected";
                         for (var i = 0; i < message.oneofDecl.length; ++i) {
-                            var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i]);
+                            var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i], long + 1);
                             if (error)
                                 return "oneofDecl." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.MessageOptions.verify(message.options);
+                        var error = $root.google.protobuf.MessageOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -24119,7 +25105,7 @@
                         if (!Array.isArray(message.reservedRange))
                             return "reservedRange: array expected";
                         for (var i = 0; i < message.reservedRange.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i]);
+                            var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i], long + 1);
                             if (error)
                                 return "reservedRange." + error;
                         }
@@ -24151,9 +25137,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.DescriptorProto} DescriptorProto
                  */
-                DescriptorProto.fromObject = function fromObject(object) {
+                DescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.DescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.DescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -24164,7 +25154,7 @@
                         for (var i = 0; i < object.field.length; ++i) {
                             if (typeof object.field[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.field: object expected");
-                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i]);
+                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i], long + 1);
                         }
                     }
                     if (object.extension) {
@@ -24174,7 +25164,7 @@
                         for (var i = 0; i < object.extension.length; ++i) {
                             if (typeof object.extension[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.extension: object expected");
-                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
+                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i], long + 1);
                         }
                     }
                     if (object.nestedType) {
@@ -24184,7 +25174,7 @@
                         for (var i = 0; i < object.nestedType.length; ++i) {
                             if (typeof object.nestedType[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.nestedType: object expected");
-                            message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i]);
+                            message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i], long + 1);
                         }
                     }
                     if (object.enumType) {
@@ -24194,7 +25184,7 @@
                         for (var i = 0; i < object.enumType.length; ++i) {
                             if (typeof object.enumType[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.enumType: object expected");
-                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]);
+                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i], long + 1);
                         }
                     }
                     if (object.extensionRange) {
@@ -24204,7 +25194,7 @@
                         for (var i = 0; i < object.extensionRange.length; ++i) {
                             if (typeof object.extensionRange[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.extensionRange: object expected");
-                            message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i]);
+                            message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i], long + 1);
                         }
                     }
                     if (object.oneofDecl) {
@@ -24214,13 +25204,13 @@
                         for (var i = 0; i < object.oneofDecl.length; ++i) {
                             if (typeof object.oneofDecl[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.oneofDecl: object expected");
-                            message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i]);
+                            message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.DescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options, long + 1);
                     }
                     if (object.reservedRange) {
                         if (!Array.isArray(object.reservedRange))
@@ -24229,7 +25219,7 @@
                         for (var i = 0; i < object.reservedRange.length; ++i) {
                             if (typeof object.reservedRange[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.reservedRange: object expected");
-                            message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i]);
+                            message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i], long + 1);
                         }
                     }
                     if (object.reservedName) {
@@ -24387,7 +25377,7 @@
                     function ExtensionRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -24472,9 +25462,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ExtensionRange.decode = function decode(reader, length, error) {
+                    ExtensionRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -24490,11 +25484,11 @@
                                     break;
                                 }
                             case 3: {
-                                    message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32());
+                                    message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -24525,9 +25519,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ExtensionRange.verify = function verify(message) {
+                    ExtensionRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -24535,7 +25533,7 @@
                             if (!$util.isInteger(message.end))
                                 return "end: integer expected";
                         if (message.options != null && message.hasOwnProperty("options")) {
-                            var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options);
+                            var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options, long + 1);
                             if (error)
                                 return "options." + error;
                         }
@@ -24550,9 +25548,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange
                      */
-                    ExtensionRange.fromObject = function fromObject(object) {
+                    ExtensionRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.DescriptorProto.ExtensionRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -24561,7 +25563,7 @@
                         if (object.options != null) {
                             if (typeof object.options !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.ExtensionRange.options: object expected");
-                            message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options);
+                            message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options, long + 1);
                         }
                         return message;
                     };
@@ -24643,7 +25645,7 @@
                     function ReservedRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -24718,9 +25720,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ReservedRange.decode = function decode(reader, length, error) {
+                    ReservedRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ReservedRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -24736,7 +25742,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -24767,9 +25773,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ReservedRange.verify = function verify(message) {
+                    ReservedRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -24787,9 +25797,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange
                      */
-                    ReservedRange.fromObject = function fromObject(object) {
+                    ReservedRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.DescriptorProto.ReservedRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.DescriptorProto.ReservedRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -24879,7 +25893,7 @@
                     this.declaration = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -24976,9 +25990,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ExtensionRangeOptions.decode = function decode(reader, length, error) {
+                ExtensionRangeOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -24988,17 +26006,17 @@
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
                                 if (!(message.declaration && message.declaration.length))
                                     message.declaration = [];
-                                message.declaration.push($root.google.protobuf.ExtensionRangeOptions.Declaration.decode(reader, reader.uint32()));
+                                message.declaration.push($root.google.protobuf.ExtensionRangeOptions.Declaration.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 50: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -25006,7 +26024,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -25037,14 +26055,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ExtensionRangeOptions.verify = function verify(message) {
+                ExtensionRangeOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) {
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -25053,13 +26075,13 @@
                         if (!Array.isArray(message.declaration))
                             return "declaration: array expected";
                         for (var i = 0; i < message.declaration.length; ++i) {
-                            var error = $root.google.protobuf.ExtensionRangeOptions.Declaration.verify(message.declaration[i]);
+                            var error = $root.google.protobuf.ExtensionRangeOptions.Declaration.verify(message.declaration[i], long + 1);
                             if (error)
                                 return "declaration." + error;
                         }
                     }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -25082,9 +26104,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions
                  */
-                ExtensionRangeOptions.fromObject = function fromObject(object) {
+                ExtensionRangeOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ExtensionRangeOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ExtensionRangeOptions();
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -25093,7 +26119,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.ExtensionRangeOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object.declaration) {
@@ -25103,13 +26129,13 @@
                         for (var i = 0; i < object.declaration.length; ++i) {
                             if (typeof object.declaration[i] !== "object")
                                 throw TypeError(".google.protobuf.ExtensionRangeOptions.declaration: object expected");
-                            message.declaration[i] = $root.google.protobuf.ExtensionRangeOptions.Declaration.fromObject(object.declaration[i]);
+                            message.declaration[i] = $root.google.protobuf.ExtensionRangeOptions.Declaration.fromObject(object.declaration[i], long + 1);
                         }
                     }
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.ExtensionRangeOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     switch (object.verification) {
                     case "DECLARATION":
@@ -25218,7 +26244,7 @@
                     function Declaration(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -25323,9 +26349,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Declaration.decode = function decode(reader, length, error) {
+                    Declaration.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions.Declaration();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -25353,7 +26383,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -25384,9 +26414,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Declaration.verify = function verify(message) {
+                    Declaration.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.number != null && message.hasOwnProperty("number"))
                             if (!$util.isInteger(message.number))
                                 return "number: integer expected";
@@ -25413,9 +26447,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.ExtensionRangeOptions.Declaration} Declaration
                      */
-                    Declaration.fromObject = function fromObject(object) {
+                    Declaration.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.ExtensionRangeOptions.Declaration)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.ExtensionRangeOptions.Declaration();
                         if (object.number != null)
                             message.number = object.number | 0;
@@ -25539,7 +26577,7 @@
                 function FieldDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -25704,9 +26742,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldDescriptorProto.decode = function decode(reader, length, error) {
+                FieldDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -25750,7 +26792,7 @@
                                 break;
                             }
                         case 8: {
-                                message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 17: {
@@ -25758,7 +26800,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -25789,9 +26831,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldDescriptorProto.verify = function verify(message) {
+                FieldDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -25847,7 +26893,7 @@
                         if (!$util.isString(message.jsonName))
                             return "jsonName: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.FieldOptions.verify(message.options);
+                        var error = $root.google.protobuf.FieldOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -25865,9 +26911,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto
                  */
-                FieldDescriptorProto.fromObject = function fromObject(object) {
+                FieldDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -25986,7 +27036,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.FieldDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options, long + 1);
                     }
                     if (object.proto3Optional != null)
                         message.proto3Optional = Boolean(object.proto3Optional);
@@ -26156,7 +27206,7 @@
                 function OneofDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -26231,9 +27281,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OneofDescriptorProto.decode = function decode(reader, length, error) {
+                OneofDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -26245,11 +27299,11 @@
                                 break;
                             }
                         case 2: {
-                                message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -26280,14 +27334,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OneofDescriptorProto.verify = function verify(message) {
+                OneofDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.OneofOptions.verify(message.options);
+                        var error = $root.google.protobuf.OneofOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -26302,16 +27360,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto
                  */
-                OneofDescriptorProto.fromObject = function fromObject(object) {
+                OneofDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.OneofDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.OneofDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.OneofDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.OneofOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.OneofOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -26397,7 +27459,7 @@
                     this.reservedName = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -26515,9 +27577,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumDescriptorProto.decode = function decode(reader, length, error) {
+                EnumDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -26531,17 +27597,17 @@
                         case 2: {
                                 if (!(message.value && message.value.length))
                                     message.value = [];
-                                message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32()));
+                                message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 4: {
                                 if (!(message.reservedRange && message.reservedRange.length))
                                     message.reservedRange = [];
-                                message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32()));
+                                message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
@@ -26555,7 +27621,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -26586,9 +27652,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumDescriptorProto.verify = function verify(message) {
+                EnumDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -26596,13 +27666,13 @@
                         if (!Array.isArray(message.value))
                             return "value: array expected";
                         for (var i = 0; i < message.value.length; ++i) {
-                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i]);
+                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i], long + 1);
                             if (error)
                                 return "value." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.EnumOptions.verify(message.options);
+                        var error = $root.google.protobuf.EnumOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -26610,7 +27680,7 @@
                         if (!Array.isArray(message.reservedRange))
                             return "reservedRange: array expected";
                         for (var i = 0; i < message.reservedRange.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i], long + 1);
                             if (error)
                                 return "reservedRange." + error;
                         }
@@ -26642,9 +27712,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto
                  */
-                EnumDescriptorProto.fromObject = function fromObject(object) {
+                EnumDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -26655,13 +27729,13 @@
                         for (var i = 0; i < object.value.length; ++i) {
                             if (typeof object.value[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumDescriptorProto.value: object expected");
-                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i]);
+                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.EnumDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options, long + 1);
                     }
                     if (object.reservedRange) {
                         if (!Array.isArray(object.reservedRange))
@@ -26670,7 +27744,7 @@
                         for (var i = 0; i < object.reservedRange.length; ++i) {
                             if (typeof object.reservedRange[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumDescriptorProto.reservedRange: object expected");
-                            message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i]);
+                            message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i], long + 1);
                         }
                     }
                     if (object.reservedName) {
@@ -26797,7 +27871,7 @@
                     function EnumReservedRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -26872,9 +27946,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    EnumReservedRange.decode = function decode(reader, length, error) {
+                    EnumReservedRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -26890,7 +27968,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -26921,9 +27999,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    EnumReservedRange.verify = function verify(message) {
+                    EnumReservedRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -26941,9 +28023,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange
                      */
-                    EnumReservedRange.fromObject = function fromObject(object) {
+                    EnumReservedRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.EnumDescriptorProto.EnumReservedRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -27030,7 +28116,7 @@
                 function EnumValueDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -27115,9 +28201,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumValueDescriptorProto.decode = function decode(reader, length, error) {
+                EnumValueDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -27133,11 +28223,11 @@
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -27168,9 +28258,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumValueDescriptorProto.verify = function verify(message) {
+                EnumValueDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -27178,7 +28272,7 @@
                         if (!$util.isInteger(message.number))
                             return "number: integer expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options);
+                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -27193,9 +28287,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto
                  */
-                EnumValueDescriptorProto.fromObject = function fromObject(object) {
+                EnumValueDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumValueDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumValueDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -27204,7 +28302,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.EnumValueDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -27288,7 +28386,7 @@
                     this.method = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -27374,9 +28472,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ServiceDescriptorProto.decode = function decode(reader, length, error) {
+                ServiceDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -27390,15 +28492,15 @@
                         case 2: {
                                 if (!(message.method && message.method.length))
                                     message.method = [];
-                                message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32()));
+                                message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -27429,9 +28531,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ServiceDescriptorProto.verify = function verify(message) {
+                ServiceDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -27439,13 +28545,13 @@
                         if (!Array.isArray(message.method))
                             return "method: array expected";
                         for (var i = 0; i < message.method.length; ++i) {
-                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i]);
+                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i], long + 1);
                             if (error)
                                 return "method." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.ServiceOptions.verify(message.options);
+                        var error = $root.google.protobuf.ServiceOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -27460,9 +28566,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto
                  */
-                ServiceDescriptorProto.fromObject = function fromObject(object) {
+                ServiceDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ServiceDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ServiceDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -27473,13 +28583,13 @@
                         for (var i = 0; i < object.method.length; ++i) {
                             if (typeof object.method[i] !== "object")
                                 throw TypeError(".google.protobuf.ServiceDescriptorProto.method: object expected");
-                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i]);
+                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.ServiceDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -27569,7 +28679,7 @@
                 function MethodDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -27684,9 +28794,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodDescriptorProto.decode = function decode(reader, length, error) {
+                MethodDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -27706,7 +28820,7 @@
                                 break;
                             }
                         case 4: {
-                                message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 5: {
@@ -27718,7 +28832,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -27749,9 +28863,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodDescriptorProto.verify = function verify(message) {
+                MethodDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -27762,7 +28880,7 @@
                         if (!$util.isString(message.outputType))
                             return "outputType: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.MethodOptions.verify(message.options);
+                        var error = $root.google.protobuf.MethodOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -27783,9 +28901,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto
                  */
-                MethodDescriptorProto.fromObject = function fromObject(object) {
+                MethodDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MethodDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MethodDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -27796,7 +28918,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.MethodDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options, long + 1);
                     }
                     if (object.clientStreaming != null)
                         message.clientStreaming = Boolean(object.clientStreaming);
@@ -27913,7 +29035,7 @@
                     this[".google.api.resourceDefinition"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -28190,9 +29312,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileOptions.decode = function decode(reader, length, error) {
+                FileOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -28276,23 +29402,23 @@
                                 break;
                             }
                         case 50: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1053: {
                                 if (!(message[".google.api.resourceDefinition"] && message[".google.api.resourceDefinition"].length))
                                     message[".google.api.resourceDefinition"] = [];
-                                message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32()));
+                                message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -28323,9 +29449,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileOptions.verify = function verify(message) {
+                FileOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.javaPackage != null && message.hasOwnProperty("javaPackage"))
                         if (!$util.isString(message.javaPackage))
                             return "javaPackage: string expected";
@@ -28390,7 +29520,7 @@
                         if (!$util.isString(message.rubyPackage))
                             return "rubyPackage: string expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -28398,7 +29528,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -28407,7 +29537,7 @@
                         if (!Array.isArray(message[".google.api.resourceDefinition"]))
                             return ".google.api.resourceDefinition: array expected";
                         for (var i = 0; i < message[".google.api.resourceDefinition"].length; ++i) {
-                            var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i]);
+                            var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i], long + 1);
                             if (error)
                                 return ".google.api.resourceDefinition." + error;
                         }
@@ -28423,9 +29553,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileOptions} FileOptions
                  */
-                FileOptions.fromObject = function fromObject(object) {
+                FileOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileOptions();
                     if (object.javaPackage != null)
                         message.javaPackage = String(object.javaPackage);
@@ -28486,7 +29620,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.FileOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -28495,7 +29629,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.FileOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.resourceDefinition"]) {
@@ -28505,7 +29639,7 @@
                         for (var i = 0; i < object[".google.api.resourceDefinition"].length; ++i) {
                             if (typeof object[".google.api.resourceDefinition"][i] !== "object")
                                 throw TypeError(".google.protobuf.FileOptions..google.api.resourceDefinition: object expected");
-                            message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i]);
+                            message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i], long + 1);
                         }
                     }
                     return message;
@@ -28676,7 +29810,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -28812,9 +29946,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MessageOptions.decode = function decode(reader, length, error) {
+                MessageOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MessageOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -28842,21 +29980,21 @@
                                 break;
                             }
                         case 12: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1053: {
-                                message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32());
+                                message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -28887,9 +30025,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MessageOptions.verify = function verify(message) {
+                MessageOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.messageSetWireFormat != null && message.hasOwnProperty("messageSetWireFormat"))
                         if (typeof message.messageSetWireFormat !== "boolean")
                             return "messageSetWireFormat: boolean expected";
@@ -28906,7 +30048,7 @@
                         if (typeof message.deprecatedLegacyJsonFieldConflicts !== "boolean")
                             return "deprecatedLegacyJsonFieldConflicts: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -28914,13 +30056,13 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
                     }
                     if (message[".google.api.resource"] != null && message.hasOwnProperty(".google.api.resource")) {
-                        var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"]);
+                        var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"], long + 1);
                         if (error)
                             return ".google.api.resource." + error;
                     }
@@ -28935,9 +30077,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MessageOptions} MessageOptions
                  */
-                MessageOptions.fromObject = function fromObject(object) {
+                MessageOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MessageOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MessageOptions();
                     if (object.messageSetWireFormat != null)
                         message.messageSetWireFormat = Boolean(object.messageSetWireFormat);
@@ -28952,7 +30098,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.MessageOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -28961,13 +30107,13 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.MessageOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.resource"] != null) {
                         if (typeof object[".google.api.resource"] !== "object")
                             throw TypeError(".google.protobuf.MessageOptions..google.api.resource: object expected");
-                        message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"]);
+                        message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"], long + 1);
                     }
                     return message;
                 };
@@ -29086,7 +30232,7 @@
                     this[".google.api.fieldBehavior"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -29305,9 +30451,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldOptions.decode = function decode(reader, length, error) {
+                FieldOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -29364,21 +30514,21 @@
                         case 20: {
                                 if (!(message.editionDefaults && message.editionDefaults.length))
                                     message.editionDefaults = [];
-                                message.editionDefaults.push($root.google.protobuf.FieldOptions.EditionDefault.decode(reader, reader.uint32()));
+                                message.editionDefaults.push($root.google.protobuf.FieldOptions.EditionDefault.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 21: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 22: {
-                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32());
+                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1052: {
@@ -29393,11 +30543,11 @@
                                 break;
                             }
                         case 1055: {
-                                message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32());
+                                message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -29428,9 +30578,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldOptions.verify = function verify(message) {
+                FieldOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.ctype != null && message.hasOwnProperty("ctype"))
                         switch (message.ctype) {
                         default:
@@ -29500,18 +30654,18 @@
                         if (!Array.isArray(message.editionDefaults))
                             return "editionDefaults: array expected";
                         for (var i = 0; i < message.editionDefaults.length; ++i) {
-                            var error = $root.google.protobuf.FieldOptions.EditionDefault.verify(message.editionDefaults[i]);
+                            var error = $root.google.protobuf.FieldOptions.EditionDefault.verify(message.editionDefaults[i], long + 1);
                             if (error)
                                 return "editionDefaults." + error;
                         }
                     }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
                     if (message.featureSupport != null && message.hasOwnProperty("featureSupport")) {
-                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport);
+                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport, long + 1);
                         if (error)
                             return "featureSupport." + error;
                     }
@@ -29519,7 +30673,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -29544,7 +30698,7 @@
                             }
                     }
                     if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) {
-                        var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"]);
+                        var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"], long + 1);
                         if (error)
                             return ".google.api.resourceReference." + error;
                     }
@@ -29559,9 +30713,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldOptions} FieldOptions
                  */
-                FieldOptions.fromObject = function fromObject(object) {
+                FieldOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldOptions();
                     switch (object.ctype) {
                     default:
@@ -29695,18 +30853,18 @@
                         for (var i = 0; i < object.editionDefaults.length; ++i) {
                             if (typeof object.editionDefaults[i] !== "object")
                                 throw TypeError(".google.protobuf.FieldOptions.editionDefaults: object expected");
-                            message.editionDefaults[i] = $root.google.protobuf.FieldOptions.EditionDefault.fromObject(object.editionDefaults[i]);
+                            message.editionDefaults[i] = $root.google.protobuf.FieldOptions.EditionDefault.fromObject(object.editionDefaults[i], long + 1);
                         }
                     }
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.FieldOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.featureSupport != null) {
                         if (typeof object.featureSupport !== "object")
                             throw TypeError(".google.protobuf.FieldOptions.featureSupport: object expected");
-                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport);
+                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -29715,7 +30873,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.FieldOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.fieldBehavior"]) {
@@ -29770,7 +30928,7 @@
                     if (object[".google.api.resourceReference"] != null) {
                         if (typeof object[".google.api.resourceReference"] !== "object")
                             throw TypeError(".google.protobuf.FieldOptions..google.api.resourceReference: object expected");
-                        message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"]);
+                        message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"], long + 1);
                     }
                     return message;
                 };
@@ -29980,7 +31138,7 @@
                     function EditionDefault(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -30055,9 +31213,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    EditionDefault.decode = function decode(reader, length, error) {
+                    EditionDefault.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions.EditionDefault();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -30073,7 +31235,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -30104,9 +31266,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    EditionDefault.verify = function verify(message) {
+                    EditionDefault.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.edition != null && message.hasOwnProperty("edition"))
                             switch (message.edition) {
                             default:
@@ -30139,9 +31305,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FieldOptions.EditionDefault} EditionDefault
                      */
-                    EditionDefault.fromObject = function fromObject(object) {
+                    EditionDefault.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FieldOptions.EditionDefault)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FieldOptions.EditionDefault();
                         switch (object.edition) {
                         default:
@@ -30280,7 +31450,7 @@
                     function FeatureSupport(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -30375,9 +31545,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    FeatureSupport.decode = function decode(reader, length, error) {
+                    FeatureSupport.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions.FeatureSupport();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -30401,7 +31575,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -30432,9 +31606,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    FeatureSupport.verify = function verify(message) {
+                    FeatureSupport.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.editionIntroduced != null && message.hasOwnProperty("editionIntroduced"))
                             switch (message.editionIntroduced) {
                             default:
@@ -30503,9 +31681,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FieldOptions.FeatureSupport} FeatureSupport
                      */
-                    FeatureSupport.fromObject = function fromObject(object) {
+                    FeatureSupport.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FieldOptions.FeatureSupport)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FieldOptions.FeatureSupport();
                         switch (object.editionIntroduced) {
                         default:
@@ -30764,7 +31946,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -30840,9 +32022,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OneofOptions.decode = function decode(reader, length, error) {
+                OneofOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -30850,17 +32036,17 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -30891,11 +32077,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OneofOptions.verify = function verify(message) {
+                OneofOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -30903,7 +32093,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -30919,14 +32109,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.OneofOptions} OneofOptions
                  */
-                OneofOptions.fromObject = function fromObject(object) {
+                OneofOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.OneofOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.OneofOptions();
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.OneofOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -30935,7 +32129,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.OneofOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -31022,7 +32216,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -31128,9 +32322,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumOptions.decode = function decode(reader, length, error) {
+                EnumOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -31150,17 +32348,17 @@
                                 break;
                             }
                         case 7: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -31191,9 +32389,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumOptions.verify = function verify(message) {
+                EnumOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.allowAlias != null && message.hasOwnProperty("allowAlias"))
                         if (typeof message.allowAlias !== "boolean")
                             return "allowAlias: boolean expected";
@@ -31204,7 +32406,7 @@
                         if (typeof message.deprecatedLegacyJsonFieldConflicts !== "boolean")
                             return "deprecatedLegacyJsonFieldConflicts: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -31212,7 +32414,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -31228,9 +32430,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumOptions} EnumOptions
                  */
-                EnumOptions.fromObject = function fromObject(object) {
+                EnumOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumOptions();
                     if (object.allowAlias != null)
                         message.allowAlias = Boolean(object.allowAlias);
@@ -31241,7 +32447,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.EnumOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -31250,7 +32456,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -31347,7 +32553,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -31453,9 +32659,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumValueOptions.decode = function decode(reader, length, error) {
+                EnumValueOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -31467,7 +32677,7 @@
                                 break;
                             }
                         case 2: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -31475,17 +32685,17 @@
                                 break;
                             }
                         case 4: {
-                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32());
+                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -31516,14 +32726,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumValueOptions.verify = function verify(message) {
+                EnumValueOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                         if (typeof message.deprecated !== "boolean")
                             return "deprecated: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -31531,7 +32745,7 @@
                         if (typeof message.debugRedact !== "boolean")
                             return "debugRedact: boolean expected";
                     if (message.featureSupport != null && message.hasOwnProperty("featureSupport")) {
-                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport);
+                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport, long + 1);
                         if (error)
                             return "featureSupport." + error;
                     }
@@ -31539,7 +32753,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -31555,23 +32769,27 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumValueOptions} EnumValueOptions
                  */
-                EnumValueOptions.fromObject = function fromObject(object) {
+                EnumValueOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumValueOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumValueOptions();
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.EnumValueOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.debugRedact != null)
                         message.debugRedact = Boolean(object.debugRedact);
                     if (object.featureSupport != null) {
                         if (typeof object.featureSupport !== "object")
                             throw TypeError(".google.protobuf.EnumValueOptions.featureSupport: object expected");
-                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport);
+                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -31580,7 +32798,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumValueOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -31678,7 +32896,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -31794,9 +33012,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ServiceOptions.decode = function decode(reader, length, error) {
+                ServiceOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -31804,7 +33026,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 34: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 33: {
@@ -31814,7 +33036,7 @@
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1049: {
@@ -31830,7 +33052,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -31861,11 +33083,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ServiceOptions.verify = function verify(message) {
+                ServiceOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -31876,7 +33102,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -31901,14 +33127,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ServiceOptions} ServiceOptions
                  */
-                ServiceOptions.fromObject = function fromObject(object) {
+                ServiceOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ServiceOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ServiceOptions();
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.ServiceOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
@@ -31919,7 +33149,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.ServiceOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.defaultHost"] != null)
@@ -32028,7 +33258,7 @@
                     this[".google.api.methodSignature"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -32155,9 +33385,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodOptions.decode = function decode(reader, length, error) {
+                MethodOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -32173,17 +33407,17 @@
                                 break;
                             }
                         case 35: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 72295728: {
-                                message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32());
+                                message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 1051: {
@@ -32193,11 +33427,11 @@
                                 break;
                             }
                         case 1049: {
-                                message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32());
+                                message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -32228,9 +33462,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodOptions.verify = function verify(message) {
+                MethodOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                         if (typeof message.deprecated !== "boolean")
                             return "deprecated: boolean expected";
@@ -32244,7 +33482,7 @@
                             break;
                         }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -32252,13 +33490,13 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
                     }
                     if (message[".google.api.http"] != null && message.hasOwnProperty(".google.api.http")) {
-                        var error = $root.google.api.HttpRule.verify(message[".google.api.http"]);
+                        var error = $root.google.api.HttpRule.verify(message[".google.api.http"], long + 1);
                         if (error)
                             return ".google.api.http." + error;
                     }
@@ -32270,7 +33508,7 @@
                                 return ".google.api.methodSignature: string[] expected";
                     }
                     if (message[".google.longrunning.operationInfo"] != null && message.hasOwnProperty(".google.longrunning.operationInfo")) {
-                        var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"]);
+                        var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"], long + 1);
                         if (error)
                             return ".google.longrunning.operationInfo." + error;
                     }
@@ -32285,9 +33523,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MethodOptions} MethodOptions
                  */
-                MethodOptions.fromObject = function fromObject(object) {
+                MethodOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MethodOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MethodOptions();
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
@@ -32314,7 +33556,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.MethodOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -32323,13 +33565,13 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.MethodOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.http"] != null) {
                         if (typeof object[".google.api.http"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.api.http: object expected");
-                        message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"]);
+                        message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"], long + 1);
                     }
                     if (object[".google.api.methodSignature"]) {
                         if (!Array.isArray(object[".google.api.methodSignature"]))
@@ -32341,7 +33583,7 @@
                     if (object[".google.longrunning.operationInfo"] != null) {
                         if (typeof object[".google.longrunning.operationInfo"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.longrunning.operationInfo: object expected");
-                        message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"]);
+                        message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"], long + 1);
                     }
                     return message;
                 };
@@ -32465,7 +33707,7 @@
                     this.name = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -32591,9 +33833,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                UninterpretedOption.decode = function decode(reader, length, error) {
+                UninterpretedOption.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -32603,7 +33849,7 @@
                         case 2: {
                                 if (!(message.name && message.name.length))
                                     message.name = [];
-                                message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32()));
+                                message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
@@ -32631,7 +33877,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -32662,14 +33908,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                UninterpretedOption.verify = function verify(message) {
+                UninterpretedOption.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name")) {
                         if (!Array.isArray(message.name))
                             return "name: array expected";
                         for (var i = 0; i < message.name.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i], long + 1);
                             if (error)
                                 return "name." + error;
                         }
@@ -32703,9 +33953,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.UninterpretedOption} UninterpretedOption
                  */
-                UninterpretedOption.fromObject = function fromObject(object) {
+                UninterpretedOption.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.UninterpretedOption)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.UninterpretedOption();
                     if (object.name) {
                         if (!Array.isArray(object.name))
@@ -32714,7 +33968,7 @@
                         for (var i = 0; i < object.name.length; ++i) {
                             if (typeof object.name[i] !== "object")
                                 throw TypeError(".google.protobuf.UninterpretedOption.name: object expected");
-                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i]);
+                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i], long + 1);
                         }
                     }
                     if (object.identifierValue != null)
@@ -32859,7 +34113,7 @@
                     function NamePart(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -32932,9 +34186,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    NamePart.decode = function decode(reader, length, error) {
+                    NamePart.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption.NamePart();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -32950,7 +34208,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -32985,9 +34243,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    NamePart.verify = function verify(message) {
+                    NamePart.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (!$util.isString(message.namePart))
                             return "namePart: string expected";
                         if (typeof message.isExtension !== "boolean")
@@ -33003,9 +34265,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart
                      */
-                    NamePart.fromObject = function fromObject(object) {
+                    NamePart.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.UninterpretedOption.NamePart)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.UninterpretedOption.NamePart();
                         if (object.namePart != null)
                             message.namePart = String(object.namePart);
@@ -33097,7 +34363,7 @@
                 function FeatureSet(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -33232,9 +34498,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FeatureSet.decode = function decode(reader, length, error) {
+                FeatureSet.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSet();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -33274,7 +34544,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -33305,9 +34575,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FeatureSet.verify = function verify(message) {
+                FeatureSet.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.fieldPresence != null && message.hasOwnProperty("fieldPresence"))
                         switch (message.fieldPresence) {
                         default:
@@ -33394,9 +34668,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FeatureSet} FeatureSet
                  */
-                FeatureSet.fromObject = function fromObject(object) {
+                FeatureSet.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FeatureSet)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FeatureSet();
                     switch (object.fieldPresence) {
                     default:
@@ -33774,7 +35052,7 @@
                     function VisibilityFeature(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -33829,9 +35107,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    VisibilityFeature.decode = function decode(reader, length, error) {
+                    VisibilityFeature.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSet.VisibilityFeature();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -33839,7 +35121,7 @@
                                 break;
                             switch (tag >>> 3) {
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -33870,9 +35152,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    VisibilityFeature.verify = function verify(message) {
+                    VisibilityFeature.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         return null;
                     };
     
@@ -33884,9 +35170,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FeatureSet.VisibilityFeature} VisibilityFeature
                      */
-                    VisibilityFeature.fromObject = function fromObject(object) {
+                    VisibilityFeature.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FeatureSet.VisibilityFeature)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         return new $root.google.protobuf.FeatureSet.VisibilityFeature();
                     };
     
@@ -33978,7 +35268,7 @@
                     this.defaults = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -34064,9 +35354,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FeatureSetDefaults.decode = function decode(reader, length, error) {
+                FeatureSetDefaults.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSetDefaults();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -34076,7 +35370,7 @@
                         case 1: {
                                 if (!(message.defaults && message.defaults.length))
                                     message.defaults = [];
-                                message.defaults.push($root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.decode(reader, reader.uint32()));
+                                message.defaults.push($root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 4: {
@@ -34088,7 +35382,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -34119,14 +35413,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FeatureSetDefaults.verify = function verify(message) {
+                FeatureSetDefaults.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.defaults != null && message.hasOwnProperty("defaults")) {
                         if (!Array.isArray(message.defaults))
                             return "defaults: array expected";
                         for (var i = 0; i < message.defaults.length; ++i) {
-                            var error = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify(message.defaults[i]);
+                            var error = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify(message.defaults[i], long + 1);
                             if (error)
                                 return "defaults." + error;
                         }
@@ -34178,9 +35476,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FeatureSetDefaults} FeatureSetDefaults
                  */
-                FeatureSetDefaults.fromObject = function fromObject(object) {
+                FeatureSetDefaults.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FeatureSetDefaults)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FeatureSetDefaults();
                     if (object.defaults) {
                         if (!Array.isArray(object.defaults))
@@ -34189,7 +35491,7 @@
                         for (var i = 0; i < object.defaults.length; ++i) {
                             if (typeof object.defaults[i] !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.defaults: object expected");
-                            message.defaults[i] = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fromObject(object.defaults[i]);
+                            message.defaults[i] = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fromObject(object.defaults[i], long + 1);
                         }
                     }
                     switch (object.minimumEdition) {
@@ -34386,7 +35688,7 @@
                     function FeatureSetEditionDefault(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -34471,9 +35773,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    FeatureSetEditionDefault.decode = function decode(reader, length, error) {
+                    FeatureSetEditionDefault.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -34485,15 +35791,15 @@
                                     break;
                                 }
                             case 4: {
-                                    message.overridableFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                    message.overridableFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 5: {
-                                    message.fixedFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                    message.fixedFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -34524,9 +35830,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    FeatureSetEditionDefault.verify = function verify(message) {
+                    FeatureSetEditionDefault.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.edition != null && message.hasOwnProperty("edition"))
                             switch (message.edition) {
                             default:
@@ -34546,12 +35856,12 @@
                                 break;
                             }
                         if (message.overridableFeatures != null && message.hasOwnProperty("overridableFeatures")) {
-                            var error = $root.google.protobuf.FeatureSet.verify(message.overridableFeatures);
+                            var error = $root.google.protobuf.FeatureSet.verify(message.overridableFeatures, long + 1);
                             if (error)
                                 return "overridableFeatures." + error;
                         }
                         if (message.fixedFeatures != null && message.hasOwnProperty("fixedFeatures")) {
-                            var error = $root.google.protobuf.FeatureSet.verify(message.fixedFeatures);
+                            var error = $root.google.protobuf.FeatureSet.verify(message.fixedFeatures, long + 1);
                             if (error)
                                 return "fixedFeatures." + error;
                         }
@@ -34566,9 +35876,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault} FeatureSetEditionDefault
                      */
-                    FeatureSetEditionDefault.fromObject = function fromObject(object) {
+                    FeatureSetEditionDefault.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault();
                         switch (object.edition) {
                         default:
@@ -34629,12 +35943,12 @@
                         if (object.overridableFeatures != null) {
                             if (typeof object.overridableFeatures !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridableFeatures: object expected");
-                            message.overridableFeatures = $root.google.protobuf.FeatureSet.fromObject(object.overridableFeatures);
+                            message.overridableFeatures = $root.google.protobuf.FeatureSet.fromObject(object.overridableFeatures, long + 1);
                         }
                         if (object.fixedFeatures != null) {
                             if (typeof object.fixedFeatures !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixedFeatures: object expected");
-                            message.fixedFeatures = $root.google.protobuf.FeatureSet.fromObject(object.fixedFeatures);
+                            message.fixedFeatures = $root.google.protobuf.FeatureSet.fromObject(object.fixedFeatures, long + 1);
                         }
                         return message;
                     };
@@ -34719,7 +36033,7 @@
                     this.location = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -34785,9 +36099,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                SourceCodeInfo.decode = function decode(reader, length, error) {
+                SourceCodeInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -34797,11 +36115,11 @@
                         case 1: {
                                 if (!(message.location && message.location.length))
                                     message.location = [];
-                                message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32()));
+                                message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -34832,14 +36150,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                SourceCodeInfo.verify = function verify(message) {
+                SourceCodeInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.location != null && message.hasOwnProperty("location")) {
                         if (!Array.isArray(message.location))
                             return "location: array expected";
                         for (var i = 0; i < message.location.length; ++i) {
-                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i]);
+                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i], long + 1);
                             if (error)
                                 return "location." + error;
                         }
@@ -34855,9 +36177,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo
                  */
-                SourceCodeInfo.fromObject = function fromObject(object) {
+                SourceCodeInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.SourceCodeInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.SourceCodeInfo();
                     if (object.location) {
                         if (!Array.isArray(object.location))
@@ -34866,7 +36192,7 @@
                         for (var i = 0; i < object.location.length; ++i) {
                             if (typeof object.location[i] !== "object")
                                 throw TypeError(".google.protobuf.SourceCodeInfo.location: object expected");
-                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i]);
+                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i], long + 1);
                         }
                     }
                     return message;
@@ -34948,7 +36274,7 @@
                         this.leadingDetachedComments = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -35062,9 +36388,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Location.decode = function decode(reader, length, error) {
+                    Location.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo.Location();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -35108,7 +36438,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -35139,9 +36469,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Location.verify = function verify(message) {
+                    Location.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.path != null && message.hasOwnProperty("path")) {
                             if (!Array.isArray(message.path))
                                 return "path: array expected";
@@ -35180,9 +36514,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.SourceCodeInfo.Location} Location
                      */
-                    Location.fromObject = function fromObject(object) {
+                    Location.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.SourceCodeInfo.Location)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.SourceCodeInfo.Location();
                         if (object.path) {
                             if (!Array.isArray(object.path))
@@ -35309,7 +36647,7 @@
                     this.annotation = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -35375,9 +36713,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GeneratedCodeInfo.decode = function decode(reader, length, error) {
+                GeneratedCodeInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -35387,11 +36729,11 @@
                         case 1: {
                                 if (!(message.annotation && message.annotation.length))
                                     message.annotation = [];
-                                message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32()));
+                                message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -35422,14 +36764,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GeneratedCodeInfo.verify = function verify(message) {
+                GeneratedCodeInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.annotation != null && message.hasOwnProperty("annotation")) {
                         if (!Array.isArray(message.annotation))
                             return "annotation: array expected";
                         for (var i = 0; i < message.annotation.length; ++i) {
-                            var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i]);
+                            var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i], long + 1);
                             if (error)
                                 return "annotation." + error;
                         }
@@ -35445,9 +36791,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo
                  */
-                GeneratedCodeInfo.fromObject = function fromObject(object) {
+                GeneratedCodeInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.GeneratedCodeInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.GeneratedCodeInfo();
                     if (object.annotation) {
                         if (!Array.isArray(object.annotation))
@@ -35456,7 +36806,7 @@
                         for (var i = 0; i < object.annotation.length; ++i) {
                             if (typeof object.annotation[i] !== "object")
                                 throw TypeError(".google.protobuf.GeneratedCodeInfo.annotation: object expected");
-                            message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i]);
+                            message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i], long + 1);
                         }
                     }
                     return message;
@@ -35536,7 +36886,7 @@
                         this.path = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -35645,9 +36995,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Annotation.decode = function decode(reader, length, error) {
+                    Annotation.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo.Annotation();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -35682,7 +37036,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -35713,9 +37067,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Annotation.verify = function verify(message) {
+                    Annotation.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.path != null && message.hasOwnProperty("path")) {
                             if (!Array.isArray(message.path))
                                 return "path: array expected";
@@ -35752,9 +37110,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation
                      */
-                    Annotation.fromObject = function fromObject(object) {
+                    Annotation.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.GeneratedCodeInfo.Annotation)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.GeneratedCodeInfo.Annotation();
                         if (object.path) {
                             if (!Array.isArray(object.path))
@@ -35914,7 +37276,7 @@
                 function Duration(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -35989,9 +37351,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Duration.decode = function decode(reader, length, error) {
+                Duration.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Duration();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36007,7 +37373,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -36038,9 +37404,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Duration.verify = function verify(message) {
+                Duration.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.seconds != null && message.hasOwnProperty("seconds"))
                         if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high)))
                             return "seconds: integer|Long expected";
@@ -36058,9 +37428,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Duration} Duration
                  */
-                Duration.fromObject = function fromObject(object) {
+                Duration.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Duration)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Duration();
                     if (object.seconds != null)
                         if ($util.Long)
@@ -36157,7 +37531,7 @@
                 function Any(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -36232,9 +37606,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Any.decode = function decode(reader, length, error) {
+                Any.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Any();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36250,7 +37628,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -36281,9 +37659,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Any.verify = function verify(message) {
+                Any.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type_url != null && message.hasOwnProperty("type_url"))
                         if (!$util.isString(message.type_url))
                             return "type_url: string expected";
@@ -36301,9 +37683,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Any} Any
                  */
-                Any.fromObject = function fromObject(object) {
+                Any.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Any)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Any();
                     if (object.type_url != null)
                         message.type_url = String(object.type_url);
@@ -36393,7 +37779,7 @@
                 function Empty(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -36448,9 +37834,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Empty.decode = function decode(reader, length, error) {
+                Empty.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Empty();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36458,7 +37848,7 @@
                             break;
                         switch (tag >>> 3) {
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -36489,9 +37879,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Empty.verify = function verify(message) {
+                Empty.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     return null;
                 };
     
@@ -36503,9 +37897,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Empty} Empty
                  */
-                Empty.fromObject = function fromObject(object) {
+                Empty.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Empty)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     return new $root.google.protobuf.Empty();
                 };
     
@@ -36572,7 +37970,7 @@
                     this.paths = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -36638,9 +38036,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldMask.decode = function decode(reader, length, error) {
+                FieldMask.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldMask();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36654,7 +38056,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -36685,9 +38087,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldMask.verify = function verify(message) {
+                FieldMask.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.paths != null && message.hasOwnProperty("paths")) {
                         if (!Array.isArray(message.paths))
                             return "paths: array expected";
@@ -36706,9 +38112,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldMask} FieldMask
                  */
-                FieldMask.fromObject = function fromObject(object) {
+                FieldMask.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldMask)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldMask();
                     if (object.paths) {
                         if (!Array.isArray(object.paths))
@@ -36793,7 +38203,7 @@
                 function Timestamp(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -36868,9 +38278,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Timestamp.decode = function decode(reader, length, error) {
+                Timestamp.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Timestamp();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36886,7 +38300,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -36917,9 +38331,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Timestamp.verify = function verify(message) {
+                Timestamp.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.seconds != null && message.hasOwnProperty("seconds"))
                         if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high)))
                             return "seconds: integer|Long expected";
@@ -36937,9 +38355,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Timestamp} Timestamp
                  */
-                Timestamp.fromObject = function fromObject(object) {
+                Timestamp.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Timestamp)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Timestamp();
                     if (object.seconds != null)
                         if ($util.Long)
@@ -37251,7 +38673,7 @@
                 function Operation(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -37370,9 +38792,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Operation.decode = function decode(reader, length, error) {
+                Operation.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.Operation();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -37384,7 +38810,7 @@
                                 break;
                             }
                         case 2: {
-                                message.metadata = $root.google.protobuf.Any.decode(reader, reader.uint32());
+                                message.metadata = $root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -37392,15 +38818,15 @@
                                 break;
                             }
                         case 4: {
-                                message.error = $root.google.rpc.Status.decode(reader, reader.uint32());
+                                message.error = $root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 5: {
-                                message.response = $root.google.protobuf.Any.decode(reader, reader.uint32());
+                                message.response = $root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -37431,15 +38857,19 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Operation.verify = function verify(message) {
+                Operation.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.metadata != null && message.hasOwnProperty("metadata")) {
-                        var error = $root.google.protobuf.Any.verify(message.metadata);
+                        var error = $root.google.protobuf.Any.verify(message.metadata, long + 1);
                         if (error)
                             return "metadata." + error;
                     }
@@ -37449,7 +38879,7 @@
                     if (message.error != null && message.hasOwnProperty("error")) {
                         properties.result = 1;
                         {
-                            var error = $root.google.rpc.Status.verify(message.error);
+                            var error = $root.google.rpc.Status.verify(message.error, long + 1);
                             if (error)
                                 return "error." + error;
                         }
@@ -37459,7 +38889,7 @@
                             return "result: multiple values";
                         properties.result = 1;
                         {
-                            var error = $root.google.protobuf.Any.verify(message.response);
+                            var error = $root.google.protobuf.Any.verify(message.response, long + 1);
                             if (error)
                                 return "response." + error;
                         }
@@ -37475,28 +38905,32 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.Operation} Operation
                  */
-                Operation.fromObject = function fromObject(object) {
+                Operation.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.Operation)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.Operation();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.metadata != null) {
                         if (typeof object.metadata !== "object")
                             throw TypeError(".google.longrunning.Operation.metadata: object expected");
-                        message.metadata = $root.google.protobuf.Any.fromObject(object.metadata);
+                        message.metadata = $root.google.protobuf.Any.fromObject(object.metadata, long + 1);
                     }
                     if (object.done != null)
                         message.done = Boolean(object.done);
                     if (object.error != null) {
                         if (typeof object.error !== "object")
                             throw TypeError(".google.longrunning.Operation.error: object expected");
-                        message.error = $root.google.rpc.Status.fromObject(object.error);
+                        message.error = $root.google.rpc.Status.fromObject(object.error, long + 1);
                     }
                     if (object.response != null) {
                         if (typeof object.response !== "object")
                             throw TypeError(".google.longrunning.Operation.response: object expected");
-                        message.response = $root.google.protobuf.Any.fromObject(object.response);
+                        message.response = $root.google.protobuf.Any.fromObject(object.response, long + 1);
                     }
                     return message;
                 };
@@ -37587,7 +39021,7 @@
                 function GetOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -37652,9 +39086,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GetOperationRequest.decode = function decode(reader, length, error) {
+                GetOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.GetOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -37666,7 +39104,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -37697,9 +39135,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GetOperationRequest.verify = function verify(message) {
+                GetOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -37714,9 +39156,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.GetOperationRequest} GetOperationRequest
                  */
-                GetOperationRequest.fromObject = function fromObject(object) {
+                GetOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.GetOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.GetOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -37795,7 +39241,7 @@
                 function ListOperationsRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -37890,9 +39336,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListOperationsRequest.decode = function decode(reader, length, error) {
+                ListOperationsRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.ListOperationsRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -37916,7 +39366,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -37947,9 +39397,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListOperationsRequest.verify = function verify(message) {
+                ListOperationsRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -37973,9 +39427,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.ListOperationsRequest} ListOperationsRequest
                  */
-                ListOperationsRequest.fromObject = function fromObject(object) {
+                ListOperationsRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.ListOperationsRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.ListOperationsRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -38069,7 +39527,7 @@
                     this.operations = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38145,9 +39603,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListOperationsResponse.decode = function decode(reader, length, error) {
+                ListOperationsResponse.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.ListOperationsResponse();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38157,7 +39619,7 @@
                         case 1: {
                                 if (!(message.operations && message.operations.length))
                                     message.operations = [];
-                                message.operations.push($root.google.longrunning.Operation.decode(reader, reader.uint32()));
+                                message.operations.push($root.google.longrunning.Operation.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
@@ -38165,7 +39627,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38196,14 +39658,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListOperationsResponse.verify = function verify(message) {
+                ListOperationsResponse.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.operations != null && message.hasOwnProperty("operations")) {
                         if (!Array.isArray(message.operations))
                             return "operations: array expected";
                         for (var i = 0; i < message.operations.length; ++i) {
-                            var error = $root.google.longrunning.Operation.verify(message.operations[i]);
+                            var error = $root.google.longrunning.Operation.verify(message.operations[i], long + 1);
                             if (error)
                                 return "operations." + error;
                         }
@@ -38222,9 +39688,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.ListOperationsResponse} ListOperationsResponse
                  */
-                ListOperationsResponse.fromObject = function fromObject(object) {
+                ListOperationsResponse.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.ListOperationsResponse)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.ListOperationsResponse();
                     if (object.operations) {
                         if (!Array.isArray(object.operations))
@@ -38233,7 +39703,7 @@
                         for (var i = 0; i < object.operations.length; ++i) {
                             if (typeof object.operations[i] !== "object")
                                 throw TypeError(".google.longrunning.ListOperationsResponse.operations: object expected");
-                            message.operations[i] = $root.google.longrunning.Operation.fromObject(object.operations[i]);
+                            message.operations[i] = $root.google.longrunning.Operation.fromObject(object.operations[i], long + 1);
                         }
                     }
                     if (object.nextPageToken != null)
@@ -38317,7 +39787,7 @@
                 function CancelOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38382,9 +39852,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CancelOperationRequest.decode = function decode(reader, length, error) {
+                CancelOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.CancelOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38396,7 +39870,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38427,9 +39901,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CancelOperationRequest.verify = function verify(message) {
+                CancelOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -38444,9 +39922,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.CancelOperationRequest} CancelOperationRequest
                  */
-                CancelOperationRequest.fromObject = function fromObject(object) {
+                CancelOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.CancelOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.CancelOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -38522,7 +40004,7 @@
                 function DeleteOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38587,9 +40069,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DeleteOperationRequest.decode = function decode(reader, length, error) {
+                DeleteOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.DeleteOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38601,7 +40087,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38632,9 +40118,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DeleteOperationRequest.verify = function verify(message) {
+                DeleteOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -38649,9 +40139,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.DeleteOperationRequest} DeleteOperationRequest
                  */
-                DeleteOperationRequest.fromObject = function fromObject(object) {
+                DeleteOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.DeleteOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.DeleteOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -38728,7 +40222,7 @@
                 function WaitOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38803,9 +40297,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                WaitOperationRequest.decode = function decode(reader, length, error) {
+                WaitOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.WaitOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38817,11 +40315,11 @@
                                 break;
                             }
                         case 2: {
-                                message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38852,14 +40350,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                WaitOperationRequest.verify = function verify(message) {
+                WaitOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.timeout != null && message.hasOwnProperty("timeout")) {
-                        var error = $root.google.protobuf.Duration.verify(message.timeout);
+                        var error = $root.google.protobuf.Duration.verify(message.timeout, long + 1);
                         if (error)
                             return "timeout." + error;
                     }
@@ -38874,16 +40376,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.WaitOperationRequest} WaitOperationRequest
                  */
-                WaitOperationRequest.fromObject = function fromObject(object) {
+                WaitOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.WaitOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.WaitOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.timeout != null) {
                         if (typeof object.timeout !== "object")
                             throw TypeError(".google.longrunning.WaitOperationRequest.timeout: object expected");
-                        message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout);
+                        message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout, long + 1);
                     }
                     return message;
                 };
@@ -38962,7 +40468,7 @@
                 function OperationInfo(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39037,9 +40543,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OperationInfo.decode = function decode(reader, length, error) {
+                OperationInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.OperationInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39055,7 +40565,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39086,9 +40596,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OperationInfo.verify = function verify(message) {
+                OperationInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.responseType != null && message.hasOwnProperty("responseType"))
                         if (!$util.isString(message.responseType))
                             return "responseType: string expected";
@@ -39106,9 +40620,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.OperationInfo} OperationInfo
                  */
-                OperationInfo.fromObject = function fromObject(object) {
+                OperationInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.OperationInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.OperationInfo();
                     if (object.responseType != null)
                         message.responseType = String(object.responseType);
@@ -39205,7 +40723,7 @@
                     this.details = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39291,9 +40809,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Status.decode = function decode(reader, length, error) {
+                Status.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.rpc.Status();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39311,11 +40833,11 @@
                         case 3: {
                                 if (!(message.details && message.details.length))
                                     message.details = [];
-                                message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32()));
+                                message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39346,9 +40868,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Status.verify = function verify(message) {
+                Status.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.code != null && message.hasOwnProperty("code"))
                         if (!$util.isInteger(message.code))
                             return "code: integer expected";
@@ -39359,7 +40885,7 @@
                         if (!Array.isArray(message.details))
                             return "details: array expected";
                         for (var i = 0; i < message.details.length; ++i) {
-                            var error = $root.google.protobuf.Any.verify(message.details[i]);
+                            var error = $root.google.protobuf.Any.verify(message.details[i], long + 1);
                             if (error)
                                 return "details." + error;
                         }
@@ -39375,9 +40901,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.rpc.Status} Status
                  */
-                Status.fromObject = function fromObject(object) {
+                Status.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.rpc.Status)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.rpc.Status();
                     if (object.code != null)
                         message.code = object.code | 0;
@@ -39390,7 +40920,7 @@
                         for (var i = 0; i < object.details.length; ++i) {
                             if (typeof object.details[i] !== "object")
                                 throw TypeError(".google.rpc.Status.details: object expected");
-                            message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i]);
+                            message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i], long + 1);
                         }
                     }
                     return message;
@@ -39517,7 +41047,7 @@
                 function TimeOfDay(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39612,9 +41142,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                TimeOfDay.decode = function decode(reader, length, error) {
+                TimeOfDay.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.type.TimeOfDay();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39638,7 +41172,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39669,9 +41203,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                TimeOfDay.verify = function verify(message) {
+                TimeOfDay.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.hours != null && message.hasOwnProperty("hours"))
                         if (!$util.isInteger(message.hours))
                             return "hours: integer expected";
@@ -39695,9 +41233,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.type.TimeOfDay} TimeOfDay
                  */
-                TimeOfDay.fromObject = function fromObject(object) {
+                TimeOfDay.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.type.TimeOfDay)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.type.TimeOfDay();
                     if (object.hours != null)
                         message.hours = object.hours | 0;
diff --git a/packages/google-cloud-resourcemanager/README.md b/packages/google-cloud-resourcemanager/README.md
index c7c87a7c1195..9dedda3826de 100644
--- a/packages/google-cloud-resourcemanager/README.md
+++ b/packages/google-cloud-resourcemanager/README.md
@@ -96,7 +96,6 @@ Samples are in the [`samples/`][homepage_samples] directory. Each sample's `READ
 | test iam permissions | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-resourcemanager/samples/generated/v3/projects.test_iam_permissions.js) |
 | undelete project | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-resourcemanager/samples/generated/v3/projects.undelete_project.js) |
 | update project | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-resourcemanager/samples/generated/v3/projects.update_project.js) |
-| cloud | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-resourcemanager/samples/generated/v3/snippet_metadata_google.cloud.resourcemanager.v3.json) |
 | create tag binding | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-resourcemanager/samples/generated/v3/tag_bindings.create_tag_binding.js) |
 | delete tag binding | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-resourcemanager/samples/generated/v3/tag_bindings.delete_tag_binding.js) |
 | list effective tags | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-resourcemanager/samples/generated/v3/tag_bindings.list_effective_tags.js) |
diff --git a/packages/google-cloud-resourcemanager/protos/protos.js b/packages/google-cloud-resourcemanager/protos/protos.js
index 39eb51fc2a03..92be4ab783c4 100644
--- a/packages/google-cloud-resourcemanager/protos/protos.js
+++ b/packages/google-cloud-resourcemanager/protos/protos.js
@@ -491,7 +491,7 @@
                         function Folder(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -626,9 +626,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Folder.decode = function decode(reader, length, error) {
+                        Folder.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.Folder();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -652,15 +656,15 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
@@ -668,7 +672,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -699,9 +703,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Folder.verify = function verify(message) {
+                        Folder.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -721,17 +729,17 @@
                                     break;
                                 }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
@@ -749,9 +757,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.Folder} Folder
                          */
-                        Folder.fromObject = function fromObject(object) {
+                        Folder.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.Folder)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.Folder();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -782,17 +794,17 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.Folder.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.Folder.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.Folder.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             if (object.etag != null)
                                 message.etag = String(object.etag);
@@ -906,7 +918,7 @@
                         function GetFolderRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -971,9 +983,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetFolderRequest.decode = function decode(reader, length, error) {
+                        GetFolderRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.GetFolderRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -985,7 +1001,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -1016,9 +1032,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetFolderRequest.verify = function verify(message) {
+                        GetFolderRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -1033,9 +1053,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.GetFolderRequest} GetFolderRequest
                          */
-                        GetFolderRequest.fromObject = function fromObject(object) {
+                        GetFolderRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.GetFolderRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.GetFolderRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -1114,7 +1138,7 @@
                         function ListFoldersRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1209,9 +1233,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListFoldersRequest.decode = function decode(reader, length, error) {
+                        ListFoldersRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListFoldersRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1235,7 +1263,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -1266,9 +1294,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListFoldersRequest.verify = function verify(message) {
+                        ListFoldersRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -1292,9 +1324,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListFoldersRequest} ListFoldersRequest
                          */
-                        ListFoldersRequest.fromObject = function fromObject(object) {
+                        ListFoldersRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListFoldersRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListFoldersRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -1388,7 +1424,7 @@
                             this.folders = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1464,9 +1500,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListFoldersResponse.decode = function decode(reader, length, error) {
+                        ListFoldersResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListFoldersResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1476,7 +1516,7 @@
                                 case 1: {
                                         if (!(message.folders && message.folders.length))
                                             message.folders = [];
-                                        message.folders.push($root.google.cloud.resourcemanager.v3.Folder.decode(reader, reader.uint32()));
+                                        message.folders.push($root.google.cloud.resourcemanager.v3.Folder.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -1484,7 +1524,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -1515,14 +1555,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListFoldersResponse.verify = function verify(message) {
+                        ListFoldersResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.folders != null && message.hasOwnProperty("folders")) {
                                 if (!Array.isArray(message.folders))
                                     return "folders: array expected";
                                 for (var i = 0; i < message.folders.length; ++i) {
-                                    var error = $root.google.cloud.resourcemanager.v3.Folder.verify(message.folders[i]);
+                                    var error = $root.google.cloud.resourcemanager.v3.Folder.verify(message.folders[i], long + 1);
                                     if (error)
                                         return "folders." + error;
                                 }
@@ -1541,9 +1585,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListFoldersResponse} ListFoldersResponse
                          */
-                        ListFoldersResponse.fromObject = function fromObject(object) {
+                        ListFoldersResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListFoldersResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListFoldersResponse();
                             if (object.folders) {
                                 if (!Array.isArray(object.folders))
@@ -1552,7 +1600,7 @@
                                 for (var i = 0; i < object.folders.length; ++i) {
                                     if (typeof object.folders[i] !== "object")
                                         throw TypeError(".google.cloud.resourcemanager.v3.ListFoldersResponse.folders: object expected");
-                                    message.folders[i] = $root.google.cloud.resourcemanager.v3.Folder.fromObject(object.folders[i]);
+                                    message.folders[i] = $root.google.cloud.resourcemanager.v3.Folder.fromObject(object.folders[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -1638,7 +1686,7 @@
                         function SearchFoldersRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1723,9 +1771,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchFoldersRequest.decode = function decode(reader, length, error) {
+                        SearchFoldersRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.SearchFoldersRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1745,7 +1797,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -1776,9 +1828,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchFoldersRequest.verify = function verify(message) {
+                        SearchFoldersRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.pageSize != null && message.hasOwnProperty("pageSize"))
                                 if (!$util.isInteger(message.pageSize))
                                     return "pageSize: integer expected";
@@ -1799,9 +1855,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.SearchFoldersRequest} SearchFoldersRequest
                          */
-                        SearchFoldersRequest.fromObject = function fromObject(object) {
+                        SearchFoldersRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.SearchFoldersRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.SearchFoldersRequest();
                             if (object.pageSize != null)
                                 message.pageSize = object.pageSize | 0;
@@ -1890,7 +1950,7 @@
                             this.folders = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1966,9 +2026,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchFoldersResponse.decode = function decode(reader, length, error) {
+                        SearchFoldersResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.SearchFoldersResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1978,7 +2042,7 @@
                                 case 1: {
                                         if (!(message.folders && message.folders.length))
                                             message.folders = [];
-                                        message.folders.push($root.google.cloud.resourcemanager.v3.Folder.decode(reader, reader.uint32()));
+                                        message.folders.push($root.google.cloud.resourcemanager.v3.Folder.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -1986,7 +2050,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2017,14 +2081,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchFoldersResponse.verify = function verify(message) {
+                        SearchFoldersResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.folders != null && message.hasOwnProperty("folders")) {
                                 if (!Array.isArray(message.folders))
                                     return "folders: array expected";
                                 for (var i = 0; i < message.folders.length; ++i) {
-                                    var error = $root.google.cloud.resourcemanager.v3.Folder.verify(message.folders[i]);
+                                    var error = $root.google.cloud.resourcemanager.v3.Folder.verify(message.folders[i], long + 1);
                                     if (error)
                                         return "folders." + error;
                                 }
@@ -2043,9 +2111,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.SearchFoldersResponse} SearchFoldersResponse
                          */
-                        SearchFoldersResponse.fromObject = function fromObject(object) {
+                        SearchFoldersResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.SearchFoldersResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.SearchFoldersResponse();
                             if (object.folders) {
                                 if (!Array.isArray(object.folders))
@@ -2054,7 +2126,7 @@
                                 for (var i = 0; i < object.folders.length; ++i) {
                                     if (typeof object.folders[i] !== "object")
                                         throw TypeError(".google.cloud.resourcemanager.v3.SearchFoldersResponse.folders: object expected");
-                                    message.folders[i] = $root.google.cloud.resourcemanager.v3.Folder.fromObject(object.folders[i]);
+                                    message.folders[i] = $root.google.cloud.resourcemanager.v3.Folder.fromObject(object.folders[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -2138,7 +2210,7 @@
                         function CreateFolderRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2203,9 +2275,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateFolderRequest.decode = function decode(reader, length, error) {
+                        CreateFolderRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateFolderRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2213,11 +2289,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.folder = $root.google.cloud.resourcemanager.v3.Folder.decode(reader, reader.uint32());
+                                        message.folder = $root.google.cloud.resourcemanager.v3.Folder.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2248,11 +2324,15 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateFolderRequest.verify = function verify(message) {
+                        CreateFolderRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.folder != null && message.hasOwnProperty("folder")) {
-                                var error = $root.google.cloud.resourcemanager.v3.Folder.verify(message.folder);
+                                var error = $root.google.cloud.resourcemanager.v3.Folder.verify(message.folder, long + 1);
                                 if (error)
                                     return "folder." + error;
                             }
@@ -2267,14 +2347,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateFolderRequest} CreateFolderRequest
                          */
-                        CreateFolderRequest.fromObject = function fromObject(object) {
+                        CreateFolderRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateFolderRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.CreateFolderRequest();
                             if (object.folder != null) {
                                 if (typeof object.folder !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.CreateFolderRequest.folder: object expected");
-                                message.folder = $root.google.cloud.resourcemanager.v3.Folder.fromObject(object.folder);
+                                message.folder = $root.google.cloud.resourcemanager.v3.Folder.fromObject(object.folder, long + 1);
                             }
                             return message;
                         };
@@ -2349,7 +2433,7 @@
                         function CreateFolderMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2424,9 +2508,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateFolderMetadata.decode = function decode(reader, length, error) {
+                        CreateFolderMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateFolderMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2442,7 +2530,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2473,9 +2561,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateFolderMetadata.verify = function verify(message) {
+                        CreateFolderMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.displayName != null && message.hasOwnProperty("displayName"))
                                 if (!$util.isString(message.displayName))
                                     return "displayName: string expected";
@@ -2493,9 +2585,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateFolderMetadata} CreateFolderMetadata
                          */
-                        CreateFolderMetadata.fromObject = function fromObject(object) {
+                        CreateFolderMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateFolderMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.CreateFolderMetadata();
                             if (object.displayName != null)
                                 message.displayName = String(object.displayName);
@@ -2578,7 +2674,7 @@
                         function UpdateFolderRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2653,9 +2749,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateFolderRequest.decode = function decode(reader, length, error) {
+                        UpdateFolderRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UpdateFolderRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2663,15 +2763,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.folder = $root.google.cloud.resourcemanager.v3.Folder.decode(reader, reader.uint32());
+                                        message.folder = $root.google.cloud.resourcemanager.v3.Folder.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2702,16 +2802,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateFolderRequest.verify = function verify(message) {
+                        UpdateFolderRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.folder != null && message.hasOwnProperty("folder")) {
-                                var error = $root.google.cloud.resourcemanager.v3.Folder.verify(message.folder);
+                                var error = $root.google.cloud.resourcemanager.v3.Folder.verify(message.folder, long + 1);
                                 if (error)
                                     return "folder." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -2726,19 +2830,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UpdateFolderRequest} UpdateFolderRequest
                          */
-                        UpdateFolderRequest.fromObject = function fromObject(object) {
+                        UpdateFolderRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UpdateFolderRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.UpdateFolderRequest();
                             if (object.folder != null) {
                                 if (typeof object.folder !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.UpdateFolderRequest.folder: object expected");
-                                message.folder = $root.google.cloud.resourcemanager.v3.Folder.fromObject(object.folder);
+                                message.folder = $root.google.cloud.resourcemanager.v3.Folder.fromObject(object.folder, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.UpdateFolderRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -2815,7 +2923,7 @@
                         function UpdateFolderMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2870,9 +2978,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateFolderMetadata.decode = function decode(reader, length, error) {
+                        UpdateFolderMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UpdateFolderMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2880,7 +2992,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2911,9 +3023,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateFolderMetadata.verify = function verify(message) {
+                        UpdateFolderMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -2925,9 +3041,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UpdateFolderMetadata} UpdateFolderMetadata
                          */
-                        UpdateFolderMetadata.fromObject = function fromObject(object) {
+                        UpdateFolderMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UpdateFolderMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.UpdateFolderMetadata();
                         };
     
@@ -2994,7 +3114,7 @@
                         function MoveFolderRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3069,9 +3189,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MoveFolderRequest.decode = function decode(reader, length, error) {
+                        MoveFolderRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.MoveFolderRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3087,7 +3211,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3118,9 +3242,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MoveFolderRequest.verify = function verify(message) {
+                        MoveFolderRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -3138,9 +3266,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.MoveFolderRequest} MoveFolderRequest
                          */
-                        MoveFolderRequest.fromObject = function fromObject(object) {
+                        MoveFolderRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.MoveFolderRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.MoveFolderRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -3224,7 +3356,7 @@
                         function MoveFolderMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3309,9 +3441,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MoveFolderMetadata.decode = function decode(reader, length, error) {
+                        MoveFolderMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.MoveFolderMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3331,7 +3467,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3362,9 +3498,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MoveFolderMetadata.verify = function verify(message) {
+                        MoveFolderMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.displayName != null && message.hasOwnProperty("displayName"))
                                 if (!$util.isString(message.displayName))
                                     return "displayName: string expected";
@@ -3385,9 +3525,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.MoveFolderMetadata} MoveFolderMetadata
                          */
-                        MoveFolderMetadata.fromObject = function fromObject(object) {
+                        MoveFolderMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.MoveFolderMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.MoveFolderMetadata();
                             if (object.displayName != null)
                                 message.displayName = String(object.displayName);
@@ -3474,7 +3618,7 @@
                         function DeleteFolderRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3539,9 +3683,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteFolderRequest.decode = function decode(reader, length, error) {
+                        DeleteFolderRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteFolderRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3553,7 +3701,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3584,9 +3732,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteFolderRequest.verify = function verify(message) {
+                        DeleteFolderRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -3601,9 +3753,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteFolderRequest} DeleteFolderRequest
                          */
-                        DeleteFolderRequest.fromObject = function fromObject(object) {
+                        DeleteFolderRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteFolderRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.DeleteFolderRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -3678,7 +3834,7 @@
                         function DeleteFolderMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3733,9 +3889,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteFolderMetadata.decode = function decode(reader, length, error) {
+                        DeleteFolderMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteFolderMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3743,7 +3903,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3774,9 +3934,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteFolderMetadata.verify = function verify(message) {
+                        DeleteFolderMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -3788,9 +3952,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteFolderMetadata} DeleteFolderMetadata
                          */
-                        DeleteFolderMetadata.fromObject = function fromObject(object) {
+                        DeleteFolderMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteFolderMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.DeleteFolderMetadata();
                         };
     
@@ -3856,7 +4024,7 @@
                         function UndeleteFolderRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3921,9 +4089,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UndeleteFolderRequest.decode = function decode(reader, length, error) {
+                        UndeleteFolderRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UndeleteFolderRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3935,7 +4107,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3966,9 +4138,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UndeleteFolderRequest.verify = function verify(message) {
+                        UndeleteFolderRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -3983,9 +4159,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UndeleteFolderRequest} UndeleteFolderRequest
                          */
-                        UndeleteFolderRequest.fromObject = function fromObject(object) {
+                        UndeleteFolderRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UndeleteFolderRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.UndeleteFolderRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -4060,7 +4240,7 @@
                         function UndeleteFolderMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4115,9 +4295,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UndeleteFolderMetadata.decode = function decode(reader, length, error) {
+                        UndeleteFolderMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UndeleteFolderMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -4125,7 +4309,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -4156,9 +4340,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UndeleteFolderMetadata.verify = function verify(message) {
+                        UndeleteFolderMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -4170,9 +4358,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UndeleteFolderMetadata} UndeleteFolderMetadata
                          */
-                        UndeleteFolderMetadata.fromObject = function fromObject(object) {
+                        UndeleteFolderMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UndeleteFolderMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.UndeleteFolderMetadata();
                         };
     
@@ -4445,7 +4637,7 @@
                         function Organization(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4594,9 +4786,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Organization.decode = function decode(reader, length, error) {
+                        Organization.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.Organization();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -4620,15 +4816,15 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
@@ -4636,7 +4832,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -4667,9 +4863,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Organization.verify = function verify(message) {
+                        Organization.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
@@ -4692,17 +4892,17 @@
                                     break;
                                 }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
@@ -4720,9 +4920,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.Organization} Organization
                          */
-                        Organization.fromObject = function fromObject(object) {
+                        Organization.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.Organization)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.Organization();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -4753,17 +4957,17 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.Organization.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.Organization.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.Organization.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             if (object.etag != null)
                                 message.etag = String(object.etag);
@@ -4879,7 +5083,7 @@
                         function GetOrganizationRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4944,9 +5148,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetOrganizationRequest.decode = function decode(reader, length, error) {
+                        GetOrganizationRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.GetOrganizationRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -4958,7 +5166,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -4989,9 +5197,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetOrganizationRequest.verify = function verify(message) {
+                        GetOrganizationRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -5006,9 +5218,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.GetOrganizationRequest} GetOrganizationRequest
                          */
-                        GetOrganizationRequest.fromObject = function fromObject(object) {
+                        GetOrganizationRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.GetOrganizationRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.GetOrganizationRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -5086,7 +5302,7 @@
                         function SearchOrganizationsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5171,9 +5387,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchOrganizationsRequest.decode = function decode(reader, length, error) {
+                        SearchOrganizationsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.SearchOrganizationsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5193,7 +5413,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5224,9 +5444,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchOrganizationsRequest.verify = function verify(message) {
+                        SearchOrganizationsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.pageSize != null && message.hasOwnProperty("pageSize"))
                                 if (!$util.isInteger(message.pageSize))
                                     return "pageSize: integer expected";
@@ -5247,9 +5471,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.SearchOrganizationsRequest} SearchOrganizationsRequest
                          */
-                        SearchOrganizationsRequest.fromObject = function fromObject(object) {
+                        SearchOrganizationsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.SearchOrganizationsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.SearchOrganizationsRequest();
                             if (object.pageSize != null)
                                 message.pageSize = object.pageSize | 0;
@@ -5338,7 +5566,7 @@
                             this.organizations = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5414,9 +5642,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchOrganizationsResponse.decode = function decode(reader, length, error) {
+                        SearchOrganizationsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.SearchOrganizationsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5426,7 +5658,7 @@
                                 case 1: {
                                         if (!(message.organizations && message.organizations.length))
                                             message.organizations = [];
-                                        message.organizations.push($root.google.cloud.resourcemanager.v3.Organization.decode(reader, reader.uint32()));
+                                        message.organizations.push($root.google.cloud.resourcemanager.v3.Organization.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -5434,7 +5666,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5465,14 +5697,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchOrganizationsResponse.verify = function verify(message) {
+                        SearchOrganizationsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.organizations != null && message.hasOwnProperty("organizations")) {
                                 if (!Array.isArray(message.organizations))
                                     return "organizations: array expected";
                                 for (var i = 0; i < message.organizations.length; ++i) {
-                                    var error = $root.google.cloud.resourcemanager.v3.Organization.verify(message.organizations[i]);
+                                    var error = $root.google.cloud.resourcemanager.v3.Organization.verify(message.organizations[i], long + 1);
                                     if (error)
                                         return "organizations." + error;
                                 }
@@ -5491,9 +5727,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.SearchOrganizationsResponse} SearchOrganizationsResponse
                          */
-                        SearchOrganizationsResponse.fromObject = function fromObject(object) {
+                        SearchOrganizationsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.SearchOrganizationsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.SearchOrganizationsResponse();
                             if (object.organizations) {
                                 if (!Array.isArray(object.organizations))
@@ -5502,7 +5742,7 @@
                                 for (var i = 0; i < object.organizations.length; ++i) {
                                     if (typeof object.organizations[i] !== "object")
                                         throw TypeError(".google.cloud.resourcemanager.v3.SearchOrganizationsResponse.organizations: object expected");
-                                    message.organizations[i] = $root.google.cloud.resourcemanager.v3.Organization.fromObject(object.organizations[i]);
+                                    message.organizations[i] = $root.google.cloud.resourcemanager.v3.Organization.fromObject(object.organizations[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -5585,7 +5825,7 @@
                         function DeleteOrganizationMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5640,9 +5880,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteOrganizationMetadata.decode = function decode(reader, length, error) {
+                        DeleteOrganizationMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteOrganizationMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5650,7 +5894,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5681,9 +5925,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteOrganizationMetadata.verify = function verify(message) {
+                        DeleteOrganizationMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -5695,9 +5943,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteOrganizationMetadata} DeleteOrganizationMetadata
                          */
-                        DeleteOrganizationMetadata.fromObject = function fromObject(object) {
+                        DeleteOrganizationMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteOrganizationMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.DeleteOrganizationMetadata();
                         };
     
@@ -5762,7 +6014,7 @@
                         function UndeleteOrganizationMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5817,9 +6069,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UndeleteOrganizationMetadata.decode = function decode(reader, length, error) {
+                        UndeleteOrganizationMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UndeleteOrganizationMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5827,7 +6083,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5858,9 +6114,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UndeleteOrganizationMetadata.verify = function verify(message) {
+                        UndeleteOrganizationMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -5872,9 +6132,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UndeleteOrganizationMetadata} UndeleteOrganizationMetadata
                          */
-                        UndeleteOrganizationMetadata.fromObject = function fromObject(object) {
+                        UndeleteOrganizationMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UndeleteOrganizationMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.UndeleteOrganizationMetadata();
                         };
     
@@ -6348,7 +6612,7 @@
                             this.labels = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -6504,9 +6768,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Project.decode = function decode(reader, length, error) {
+                        Project.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.Project(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -6534,15 +6802,15 @@
                                         break;
                                     }
                                 case 6: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
@@ -6565,15 +6833,17 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6604,9 +6874,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Project.verify = function verify(message) {
+                        Project.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -6629,17 +6903,17 @@
                                 if (!$util.isString(message.displayName))
                                     return "displayName: string expected";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
@@ -6665,9 +6939,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.Project} Project
                          */
-                        Project.fromObject = function fromObject(object) {
+                        Project.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.Project)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.Project();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -6700,17 +6978,17 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.Project.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.Project.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.Project.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             if (object.etag != null)
                                 message.etag = String(object.etag);
@@ -6718,8 +6996,11 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.Project.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             return message;
                         };
@@ -6771,8 +7052,11 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             return object;
                         };
@@ -6842,7 +7126,7 @@
                         function GetProjectRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -6907,9 +7191,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetProjectRequest.decode = function decode(reader, length, error) {
+                        GetProjectRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.GetProjectRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -6921,7 +7209,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6952,9 +7240,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetProjectRequest.verify = function verify(message) {
+                        GetProjectRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -6969,9 +7261,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.GetProjectRequest} GetProjectRequest
                          */
-                        GetProjectRequest.fromObject = function fromObject(object) {
+                        GetProjectRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.GetProjectRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.GetProjectRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -7050,7 +7346,7 @@
                         function ListProjectsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7145,9 +7441,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListProjectsRequest.decode = function decode(reader, length, error) {
+                        ListProjectsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListProjectsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7171,7 +7471,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7202,9 +7502,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListProjectsRequest.verify = function verify(message) {
+                        ListProjectsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -7228,9 +7532,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListProjectsRequest} ListProjectsRequest
                          */
-                        ListProjectsRequest.fromObject = function fromObject(object) {
+                        ListProjectsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListProjectsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListProjectsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -7324,7 +7632,7 @@
                             this.projects = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7400,9 +7708,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListProjectsResponse.decode = function decode(reader, length, error) {
+                        ListProjectsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListProjectsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7412,7 +7724,7 @@
                                 case 1: {
                                         if (!(message.projects && message.projects.length))
                                             message.projects = [];
-                                        message.projects.push($root.google.cloud.resourcemanager.v3.Project.decode(reader, reader.uint32()));
+                                        message.projects.push($root.google.cloud.resourcemanager.v3.Project.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -7420,7 +7732,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7451,14 +7763,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListProjectsResponse.verify = function verify(message) {
+                        ListProjectsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.projects != null && message.hasOwnProperty("projects")) {
                                 if (!Array.isArray(message.projects))
                                     return "projects: array expected";
                                 for (var i = 0; i < message.projects.length; ++i) {
-                                    var error = $root.google.cloud.resourcemanager.v3.Project.verify(message.projects[i]);
+                                    var error = $root.google.cloud.resourcemanager.v3.Project.verify(message.projects[i], long + 1);
                                     if (error)
                                         return "projects." + error;
                                 }
@@ -7477,9 +7793,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListProjectsResponse} ListProjectsResponse
                          */
-                        ListProjectsResponse.fromObject = function fromObject(object) {
+                        ListProjectsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListProjectsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListProjectsResponse();
                             if (object.projects) {
                                 if (!Array.isArray(object.projects))
@@ -7488,7 +7808,7 @@
                                 for (var i = 0; i < object.projects.length; ++i) {
                                     if (typeof object.projects[i] !== "object")
                                         throw TypeError(".google.cloud.resourcemanager.v3.ListProjectsResponse.projects: object expected");
-                                    message.projects[i] = $root.google.cloud.resourcemanager.v3.Project.fromObject(object.projects[i]);
+                                    message.projects[i] = $root.google.cloud.resourcemanager.v3.Project.fromObject(object.projects[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -7574,7 +7894,7 @@
                         function SearchProjectsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7659,9 +7979,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchProjectsRequest.decode = function decode(reader, length, error) {
+                        SearchProjectsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.SearchProjectsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7681,7 +8005,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7712,9 +8036,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchProjectsRequest.verify = function verify(message) {
+                        SearchProjectsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.query != null && message.hasOwnProperty("query"))
                                 if (!$util.isString(message.query))
                                     return "query: string expected";
@@ -7735,9 +8063,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.SearchProjectsRequest} SearchProjectsRequest
                          */
-                        SearchProjectsRequest.fromObject = function fromObject(object) {
+                        SearchProjectsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.SearchProjectsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.SearchProjectsRequest();
                             if (object.query != null)
                                 message.query = String(object.query);
@@ -7826,7 +8158,7 @@
                             this.projects = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7902,9 +8234,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchProjectsResponse.decode = function decode(reader, length, error) {
+                        SearchProjectsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.SearchProjectsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7914,7 +8250,7 @@
                                 case 1: {
                                         if (!(message.projects && message.projects.length))
                                             message.projects = [];
-                                        message.projects.push($root.google.cloud.resourcemanager.v3.Project.decode(reader, reader.uint32()));
+                                        message.projects.push($root.google.cloud.resourcemanager.v3.Project.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -7922,7 +8258,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7953,14 +8289,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchProjectsResponse.verify = function verify(message) {
+                        SearchProjectsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.projects != null && message.hasOwnProperty("projects")) {
                                 if (!Array.isArray(message.projects))
                                     return "projects: array expected";
                                 for (var i = 0; i < message.projects.length; ++i) {
-                                    var error = $root.google.cloud.resourcemanager.v3.Project.verify(message.projects[i]);
+                                    var error = $root.google.cloud.resourcemanager.v3.Project.verify(message.projects[i], long + 1);
                                     if (error)
                                         return "projects." + error;
                                 }
@@ -7979,9 +8319,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.SearchProjectsResponse} SearchProjectsResponse
                          */
-                        SearchProjectsResponse.fromObject = function fromObject(object) {
+                        SearchProjectsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.SearchProjectsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.SearchProjectsResponse();
                             if (object.projects) {
                                 if (!Array.isArray(object.projects))
@@ -7990,7 +8334,7 @@
                                 for (var i = 0; i < object.projects.length; ++i) {
                                     if (typeof object.projects[i] !== "object")
                                         throw TypeError(".google.cloud.resourcemanager.v3.SearchProjectsResponse.projects: object expected");
-                                    message.projects[i] = $root.google.cloud.resourcemanager.v3.Project.fromObject(object.projects[i]);
+                                    message.projects[i] = $root.google.cloud.resourcemanager.v3.Project.fromObject(object.projects[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -8074,7 +8418,7 @@
                         function CreateProjectRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -8139,9 +8483,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateProjectRequest.decode = function decode(reader, length, error) {
+                        CreateProjectRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateProjectRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -8149,11 +8497,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.project = $root.google.cloud.resourcemanager.v3.Project.decode(reader, reader.uint32());
+                                        message.project = $root.google.cloud.resourcemanager.v3.Project.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -8184,11 +8532,15 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateProjectRequest.verify = function verify(message) {
+                        CreateProjectRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.project != null && message.hasOwnProperty("project")) {
-                                var error = $root.google.cloud.resourcemanager.v3.Project.verify(message.project);
+                                var error = $root.google.cloud.resourcemanager.v3.Project.verify(message.project, long + 1);
                                 if (error)
                                     return "project." + error;
                             }
@@ -8203,14 +8555,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateProjectRequest} CreateProjectRequest
                          */
-                        CreateProjectRequest.fromObject = function fromObject(object) {
+                        CreateProjectRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateProjectRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.CreateProjectRequest();
                             if (object.project != null) {
                                 if (typeof object.project !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.CreateProjectRequest.project: object expected");
-                                message.project = $root.google.cloud.resourcemanager.v3.Project.fromObject(object.project);
+                                message.project = $root.google.cloud.resourcemanager.v3.Project.fromObject(object.project, long + 1);
                             }
                             return message;
                         };
@@ -8286,7 +8642,7 @@
                         function CreateProjectMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -8371,9 +8727,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateProjectMetadata.decode = function decode(reader, length, error) {
+                        CreateProjectMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateProjectMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -8381,7 +8741,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
@@ -8393,7 +8753,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -8424,11 +8784,15 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateProjectMetadata.verify = function verify(message) {
+                        CreateProjectMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
@@ -8449,14 +8813,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateProjectMetadata} CreateProjectMetadata
                          */
-                        CreateProjectMetadata.fromObject = function fromObject(object) {
+                        CreateProjectMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateProjectMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.CreateProjectMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.CreateProjectMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.gettable != null)
                                 message.gettable = Boolean(object.gettable);
@@ -8542,7 +8910,7 @@
                         function UpdateProjectRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -8617,9 +8985,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateProjectRequest.decode = function decode(reader, length, error) {
+                        UpdateProjectRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UpdateProjectRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -8627,15 +8999,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.project = $root.google.cloud.resourcemanager.v3.Project.decode(reader, reader.uint32());
+                                        message.project = $root.google.cloud.resourcemanager.v3.Project.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -8666,16 +9038,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateProjectRequest.verify = function verify(message) {
+                        UpdateProjectRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.project != null && message.hasOwnProperty("project")) {
-                                var error = $root.google.cloud.resourcemanager.v3.Project.verify(message.project);
+                                var error = $root.google.cloud.resourcemanager.v3.Project.verify(message.project, long + 1);
                                 if (error)
                                     return "project." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -8690,19 +9066,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UpdateProjectRequest} UpdateProjectRequest
                          */
-                        UpdateProjectRequest.fromObject = function fromObject(object) {
+                        UpdateProjectRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UpdateProjectRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.UpdateProjectRequest();
                             if (object.project != null) {
                                 if (typeof object.project !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.UpdateProjectRequest.project: object expected");
-                                message.project = $root.google.cloud.resourcemanager.v3.Project.fromObject(object.project);
+                                message.project = $root.google.cloud.resourcemanager.v3.Project.fromObject(object.project, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.UpdateProjectRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -8779,7 +9159,7 @@
                         function UpdateProjectMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -8834,9 +9214,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateProjectMetadata.decode = function decode(reader, length, error) {
+                        UpdateProjectMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UpdateProjectMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -8844,7 +9228,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -8875,9 +9259,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateProjectMetadata.verify = function verify(message) {
+                        UpdateProjectMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -8889,9 +9277,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UpdateProjectMetadata} UpdateProjectMetadata
                          */
-                        UpdateProjectMetadata.fromObject = function fromObject(object) {
+                        UpdateProjectMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UpdateProjectMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.UpdateProjectMetadata();
                         };
     
@@ -8958,7 +9350,7 @@
                         function MoveProjectRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -9033,9 +9425,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MoveProjectRequest.decode = function decode(reader, length, error) {
+                        MoveProjectRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.MoveProjectRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -9051,7 +9447,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9082,9 +9478,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MoveProjectRequest.verify = function verify(message) {
+                        MoveProjectRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -9102,9 +9502,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.MoveProjectRequest} MoveProjectRequest
                          */
-                        MoveProjectRequest.fromObject = function fromObject(object) {
+                        MoveProjectRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.MoveProjectRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.MoveProjectRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -9185,7 +9589,7 @@
                         function MoveProjectMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -9240,9 +9644,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MoveProjectMetadata.decode = function decode(reader, length, error) {
+                        MoveProjectMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.MoveProjectMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -9250,7 +9658,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9281,9 +9689,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MoveProjectMetadata.verify = function verify(message) {
+                        MoveProjectMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -9295,9 +9707,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.MoveProjectMetadata} MoveProjectMetadata
                          */
-                        MoveProjectMetadata.fromObject = function fromObject(object) {
+                        MoveProjectMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.MoveProjectMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.MoveProjectMetadata();
                         };
     
@@ -9363,7 +9779,7 @@
                         function DeleteProjectRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -9428,9 +9844,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteProjectRequest.decode = function decode(reader, length, error) {
+                        DeleteProjectRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteProjectRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -9442,7 +9862,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9473,9 +9893,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteProjectRequest.verify = function verify(message) {
+                        DeleteProjectRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -9490,9 +9914,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteProjectRequest} DeleteProjectRequest
                          */
-                        DeleteProjectRequest.fromObject = function fromObject(object) {
+                        DeleteProjectRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteProjectRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.DeleteProjectRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -9567,7 +9995,7 @@
                         function DeleteProjectMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -9622,9 +10050,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteProjectMetadata.decode = function decode(reader, length, error) {
+                        DeleteProjectMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteProjectMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -9632,7 +10064,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9663,9 +10095,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteProjectMetadata.verify = function verify(message) {
+                        DeleteProjectMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -9677,9 +10113,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteProjectMetadata} DeleteProjectMetadata
                          */
-                        DeleteProjectMetadata.fromObject = function fromObject(object) {
+                        DeleteProjectMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteProjectMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.DeleteProjectMetadata();
                         };
     
@@ -9745,7 +10185,7 @@
                         function UndeleteProjectRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -9810,9 +10250,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UndeleteProjectRequest.decode = function decode(reader, length, error) {
+                        UndeleteProjectRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UndeleteProjectRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -9824,7 +10268,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9855,9 +10299,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UndeleteProjectRequest.verify = function verify(message) {
+                        UndeleteProjectRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -9872,9 +10320,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UndeleteProjectRequest} UndeleteProjectRequest
                          */
-                        UndeleteProjectRequest.fromObject = function fromObject(object) {
+                        UndeleteProjectRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UndeleteProjectRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.UndeleteProjectRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -9949,7 +10401,7 @@
                         function UndeleteProjectMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10004,9 +10456,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UndeleteProjectMetadata.decode = function decode(reader, length, error) {
+                        UndeleteProjectMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UndeleteProjectMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10014,7 +10470,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10045,9 +10501,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UndeleteProjectMetadata.verify = function verify(message) {
+                        UndeleteProjectMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -10059,9 +10519,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UndeleteProjectMetadata} UndeleteProjectMetadata
                          */
-                        UndeleteProjectMetadata.fromObject = function fromObject(object) {
+                        UndeleteProjectMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UndeleteProjectMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.UndeleteProjectMetadata();
                         };
     
@@ -10297,7 +10761,7 @@
                         function TagBinding(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10392,9 +10856,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TagBinding.decode = function decode(reader, length, error) {
+                        TagBinding.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.TagBinding();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10418,7 +10886,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10449,9 +10917,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TagBinding.verify = function verify(message) {
+                        TagBinding.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -10475,9 +10947,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.TagBinding} TagBinding
                          */
-                        TagBinding.fromObject = function fromObject(object) {
+                        TagBinding.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.TagBinding)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.TagBinding();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -10568,7 +11044,7 @@
                         function CreateTagBindingMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10623,9 +11099,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateTagBindingMetadata.decode = function decode(reader, length, error) {
+                        CreateTagBindingMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateTagBindingMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10633,7 +11113,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10664,9 +11144,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateTagBindingMetadata.verify = function verify(message) {
+                        CreateTagBindingMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -10678,9 +11162,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateTagBindingMetadata} CreateTagBindingMetadata
                          */
-                        CreateTagBindingMetadata.fromObject = function fromObject(object) {
+                        CreateTagBindingMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateTagBindingMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.CreateTagBindingMetadata();
                         };
     
@@ -10747,7 +11235,7 @@
                         function CreateTagBindingRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10822,9 +11310,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateTagBindingRequest.decode = function decode(reader, length, error) {
+                        CreateTagBindingRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateTagBindingRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10832,7 +11324,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.tagBinding = $root.google.cloud.resourcemanager.v3.TagBinding.decode(reader, reader.uint32());
+                                        message.tagBinding = $root.google.cloud.resourcemanager.v3.TagBinding.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
@@ -10840,7 +11332,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10871,11 +11363,15 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateTagBindingRequest.verify = function verify(message) {
+                        CreateTagBindingRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tagBinding != null && message.hasOwnProperty("tagBinding")) {
-                                var error = $root.google.cloud.resourcemanager.v3.TagBinding.verify(message.tagBinding);
+                                var error = $root.google.cloud.resourcemanager.v3.TagBinding.verify(message.tagBinding, long + 1);
                                 if (error)
                                     return "tagBinding." + error;
                             }
@@ -10893,14 +11389,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateTagBindingRequest} CreateTagBindingRequest
                          */
-                        CreateTagBindingRequest.fromObject = function fromObject(object) {
+                        CreateTagBindingRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateTagBindingRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.CreateTagBindingRequest();
                             if (object.tagBinding != null) {
                                 if (typeof object.tagBinding !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.CreateTagBindingRequest.tagBinding: object expected");
-                                message.tagBinding = $root.google.cloud.resourcemanager.v3.TagBinding.fromObject(object.tagBinding);
+                                message.tagBinding = $root.google.cloud.resourcemanager.v3.TagBinding.fromObject(object.tagBinding, long + 1);
                             }
                             if (object.validateOnly != null)
                                 message.validateOnly = Boolean(object.validateOnly);
@@ -10979,7 +11479,7 @@
                         function DeleteTagBindingMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11034,9 +11534,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteTagBindingMetadata.decode = function decode(reader, length, error) {
+                        DeleteTagBindingMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteTagBindingMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11044,7 +11548,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11075,9 +11579,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteTagBindingMetadata.verify = function verify(message) {
+                        DeleteTagBindingMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -11089,9 +11597,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteTagBindingMetadata} DeleteTagBindingMetadata
                          */
-                        DeleteTagBindingMetadata.fromObject = function fromObject(object) {
+                        DeleteTagBindingMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteTagBindingMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.DeleteTagBindingMetadata();
                         };
     
@@ -11157,7 +11669,7 @@
                         function DeleteTagBindingRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11222,9 +11734,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteTagBindingRequest.decode = function decode(reader, length, error) {
+                        DeleteTagBindingRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteTagBindingRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11236,7 +11752,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11267,9 +11783,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteTagBindingRequest.verify = function verify(message) {
+                        DeleteTagBindingRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -11284,9 +11804,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteTagBindingRequest} DeleteTagBindingRequest
                          */
-                        DeleteTagBindingRequest.fromObject = function fromObject(object) {
+                        DeleteTagBindingRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteTagBindingRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.DeleteTagBindingRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -11364,7 +11888,7 @@
                         function ListTagBindingsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11449,9 +11973,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListTagBindingsRequest.decode = function decode(reader, length, error) {
+                        ListTagBindingsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListTagBindingsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11471,7 +11999,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11502,9 +12030,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListTagBindingsRequest.verify = function verify(message) {
+                        ListTagBindingsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -11525,9 +12057,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListTagBindingsRequest} ListTagBindingsRequest
                          */
-                        ListTagBindingsRequest.fromObject = function fromObject(object) {
+                        ListTagBindingsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListTagBindingsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListTagBindingsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -11616,7 +12152,7 @@
                             this.tagBindings = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11692,9 +12228,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListTagBindingsResponse.decode = function decode(reader, length, error) {
+                        ListTagBindingsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListTagBindingsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11704,7 +12244,7 @@
                                 case 1: {
                                         if (!(message.tagBindings && message.tagBindings.length))
                                             message.tagBindings = [];
-                                        message.tagBindings.push($root.google.cloud.resourcemanager.v3.TagBinding.decode(reader, reader.uint32()));
+                                        message.tagBindings.push($root.google.cloud.resourcemanager.v3.TagBinding.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -11712,7 +12252,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11743,14 +12283,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListTagBindingsResponse.verify = function verify(message) {
+                        ListTagBindingsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tagBindings != null && message.hasOwnProperty("tagBindings")) {
                                 if (!Array.isArray(message.tagBindings))
                                     return "tagBindings: array expected";
                                 for (var i = 0; i < message.tagBindings.length; ++i) {
-                                    var error = $root.google.cloud.resourcemanager.v3.TagBinding.verify(message.tagBindings[i]);
+                                    var error = $root.google.cloud.resourcemanager.v3.TagBinding.verify(message.tagBindings[i], long + 1);
                                     if (error)
                                         return "tagBindings." + error;
                                 }
@@ -11769,9 +12313,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListTagBindingsResponse} ListTagBindingsResponse
                          */
-                        ListTagBindingsResponse.fromObject = function fromObject(object) {
+                        ListTagBindingsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListTagBindingsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListTagBindingsResponse();
                             if (object.tagBindings) {
                                 if (!Array.isArray(object.tagBindings))
@@ -11780,7 +12328,7 @@
                                 for (var i = 0; i < object.tagBindings.length; ++i) {
                                     if (typeof object.tagBindings[i] !== "object")
                                         throw TypeError(".google.cloud.resourcemanager.v3.ListTagBindingsResponse.tagBindings: object expected");
-                                    message.tagBindings[i] = $root.google.cloud.resourcemanager.v3.TagBinding.fromObject(object.tagBindings[i]);
+                                    message.tagBindings[i] = $root.google.cloud.resourcemanager.v3.TagBinding.fromObject(object.tagBindings[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -11866,7 +12414,7 @@
                         function ListEffectiveTagsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11951,9 +12499,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListEffectiveTagsRequest.decode = function decode(reader, length, error) {
+                        ListEffectiveTagsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListEffectiveTagsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11973,7 +12525,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12004,9 +12556,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListEffectiveTagsRequest.verify = function verify(message) {
+                        ListEffectiveTagsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -12027,9 +12583,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListEffectiveTagsRequest} ListEffectiveTagsRequest
                          */
-                        ListEffectiveTagsRequest.fromObject = function fromObject(object) {
+                        ListEffectiveTagsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListEffectiveTagsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListEffectiveTagsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -12118,7 +12678,7 @@
                             this.effectiveTags = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12194,9 +12754,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListEffectiveTagsResponse.decode = function decode(reader, length, error) {
+                        ListEffectiveTagsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListEffectiveTagsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12206,7 +12770,7 @@
                                 case 1: {
                                         if (!(message.effectiveTags && message.effectiveTags.length))
                                             message.effectiveTags = [];
-                                        message.effectiveTags.push($root.google.cloud.resourcemanager.v3.EffectiveTag.decode(reader, reader.uint32()));
+                                        message.effectiveTags.push($root.google.cloud.resourcemanager.v3.EffectiveTag.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -12214,7 +12778,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12245,14 +12809,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListEffectiveTagsResponse.verify = function verify(message) {
+                        ListEffectiveTagsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.effectiveTags != null && message.hasOwnProperty("effectiveTags")) {
                                 if (!Array.isArray(message.effectiveTags))
                                     return "effectiveTags: array expected";
                                 for (var i = 0; i < message.effectiveTags.length; ++i) {
-                                    var error = $root.google.cloud.resourcemanager.v3.EffectiveTag.verify(message.effectiveTags[i]);
+                                    var error = $root.google.cloud.resourcemanager.v3.EffectiveTag.verify(message.effectiveTags[i], long + 1);
                                     if (error)
                                         return "effectiveTags." + error;
                                 }
@@ -12271,9 +12839,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListEffectiveTagsResponse} ListEffectiveTagsResponse
                          */
-                        ListEffectiveTagsResponse.fromObject = function fromObject(object) {
+                        ListEffectiveTagsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListEffectiveTagsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListEffectiveTagsResponse();
                             if (object.effectiveTags) {
                                 if (!Array.isArray(object.effectiveTags))
@@ -12282,7 +12854,7 @@
                                 for (var i = 0; i < object.effectiveTags.length; ++i) {
                                     if (typeof object.effectiveTags[i] !== "object")
                                         throw TypeError(".google.cloud.resourcemanager.v3.ListEffectiveTagsResponse.effectiveTags: object expected");
-                                    message.effectiveTags[i] = $root.google.cloud.resourcemanager.v3.EffectiveTag.fromObject(object.effectiveTags[i]);
+                                    message.effectiveTags[i] = $root.google.cloud.resourcemanager.v3.EffectiveTag.fromObject(object.effectiveTags[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -12371,7 +12943,7 @@
                         function EffectiveTag(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12486,9 +13058,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        EffectiveTag.decode = function decode(reader, length, error) {
+                        EffectiveTag.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.EffectiveTag();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12520,7 +13096,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12551,9 +13127,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        EffectiveTag.verify = function verify(message) {
+                        EffectiveTag.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tagValue != null && message.hasOwnProperty("tagValue"))
                                 if (!$util.isString(message.tagValue))
                                     return "tagValue: string expected";
@@ -12583,9 +13163,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.EffectiveTag} EffectiveTag
                          */
-                        EffectiveTag.fromObject = function fromObject(object) {
+                        EffectiveTag.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.EffectiveTag)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.EffectiveTag();
                             if (object.tagValue != null)
                                 message.tagValue = String(object.tagValue);
@@ -12825,7 +13409,7 @@
                         function TagHold(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12930,9 +13514,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TagHold.decode = function decode(reader, length, error) {
+                        TagHold.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.TagHold();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12956,11 +13544,11 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12991,9 +13579,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TagHold.verify = function verify(message) {
+                        TagHold.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -13007,7 +13599,7 @@
                                 if (!$util.isString(message.helpLink))
                                     return "helpLink: string expected";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
@@ -13022,9 +13614,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.TagHold} TagHold
                          */
-                        TagHold.fromObject = function fromObject(object) {
+                        TagHold.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.TagHold)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.TagHold();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -13037,7 +13633,7 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.TagHold.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             return message;
                         };
@@ -13126,7 +13722,7 @@
                         function CreateTagHoldRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13211,9 +13807,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateTagHoldRequest.decode = function decode(reader, length, error) {
+                        CreateTagHoldRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateTagHoldRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13225,7 +13825,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.tagHold = $root.google.cloud.resourcemanager.v3.TagHold.decode(reader, reader.uint32());
+                                        message.tagHold = $root.google.cloud.resourcemanager.v3.TagHold.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -13233,7 +13833,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13264,14 +13864,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateTagHoldRequest.verify = function verify(message) {
+                        CreateTagHoldRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.tagHold != null && message.hasOwnProperty("tagHold")) {
-                                var error = $root.google.cloud.resourcemanager.v3.TagHold.verify(message.tagHold);
+                                var error = $root.google.cloud.resourcemanager.v3.TagHold.verify(message.tagHold, long + 1);
                                 if (error)
                                     return "tagHold." + error;
                             }
@@ -13289,16 +13893,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateTagHoldRequest} CreateTagHoldRequest
                          */
-                        CreateTagHoldRequest.fromObject = function fromObject(object) {
+                        CreateTagHoldRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateTagHoldRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.CreateTagHoldRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.tagHold != null) {
                                 if (typeof object.tagHold !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.CreateTagHoldRequest.tagHold: object expected");
-                                message.tagHold = $root.google.cloud.resourcemanager.v3.TagHold.fromObject(object.tagHold);
+                                message.tagHold = $root.google.cloud.resourcemanager.v3.TagHold.fromObject(object.tagHold, long + 1);
                             }
                             if (object.validateOnly != null)
                                 message.validateOnly = Boolean(object.validateOnly);
@@ -13380,7 +13988,7 @@
                         function CreateTagHoldMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13435,9 +14043,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateTagHoldMetadata.decode = function decode(reader, length, error) {
+                        CreateTagHoldMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateTagHoldMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13445,7 +14057,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13476,9 +14088,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateTagHoldMetadata.verify = function verify(message) {
+                        CreateTagHoldMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -13490,9 +14106,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateTagHoldMetadata} CreateTagHoldMetadata
                          */
-                        CreateTagHoldMetadata.fromObject = function fromObject(object) {
+                        CreateTagHoldMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateTagHoldMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.CreateTagHoldMetadata();
                         };
     
@@ -13559,7 +14179,7 @@
                         function DeleteTagHoldRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13634,9 +14254,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteTagHoldRequest.decode = function decode(reader, length, error) {
+                        DeleteTagHoldRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteTagHoldRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13652,7 +14276,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13683,9 +14307,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteTagHoldRequest.verify = function verify(message) {
+                        DeleteTagHoldRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -13703,9 +14331,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteTagHoldRequest} DeleteTagHoldRequest
                          */
-                        DeleteTagHoldRequest.fromObject = function fromObject(object) {
+                        DeleteTagHoldRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteTagHoldRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.DeleteTagHoldRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -13786,7 +14418,7 @@
                         function DeleteTagHoldMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13841,9 +14473,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteTagHoldMetadata.decode = function decode(reader, length, error) {
+                        DeleteTagHoldMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteTagHoldMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13851,7 +14487,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13882,9 +14518,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteTagHoldMetadata.verify = function verify(message) {
+                        DeleteTagHoldMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -13896,9 +14536,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteTagHoldMetadata} DeleteTagHoldMetadata
                          */
-                        DeleteTagHoldMetadata.fromObject = function fromObject(object) {
+                        DeleteTagHoldMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteTagHoldMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.DeleteTagHoldMetadata();
                         };
     
@@ -13967,7 +14611,7 @@
                         function ListTagHoldsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14062,9 +14706,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListTagHoldsRequest.decode = function decode(reader, length, error) {
+                        ListTagHoldsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListTagHoldsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14088,7 +14736,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14119,9 +14767,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListTagHoldsRequest.verify = function verify(message) {
+                        ListTagHoldsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -14145,9 +14797,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListTagHoldsRequest} ListTagHoldsRequest
                          */
-                        ListTagHoldsRequest.fromObject = function fromObject(object) {
+                        ListTagHoldsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListTagHoldsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListTagHoldsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -14241,7 +14897,7 @@
                             this.tagHolds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14317,9 +14973,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListTagHoldsResponse.decode = function decode(reader, length, error) {
+                        ListTagHoldsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListTagHoldsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14329,7 +14989,7 @@
                                 case 1: {
                                         if (!(message.tagHolds && message.tagHolds.length))
                                             message.tagHolds = [];
-                                        message.tagHolds.push($root.google.cloud.resourcemanager.v3.TagHold.decode(reader, reader.uint32()));
+                                        message.tagHolds.push($root.google.cloud.resourcemanager.v3.TagHold.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -14337,7 +14997,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14368,14 +15028,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListTagHoldsResponse.verify = function verify(message) {
+                        ListTagHoldsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tagHolds != null && message.hasOwnProperty("tagHolds")) {
                                 if (!Array.isArray(message.tagHolds))
                                     return "tagHolds: array expected";
                                 for (var i = 0; i < message.tagHolds.length; ++i) {
-                                    var error = $root.google.cloud.resourcemanager.v3.TagHold.verify(message.tagHolds[i]);
+                                    var error = $root.google.cloud.resourcemanager.v3.TagHold.verify(message.tagHolds[i], long + 1);
                                     if (error)
                                         return "tagHolds." + error;
                                 }
@@ -14394,9 +15058,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListTagHoldsResponse} ListTagHoldsResponse
                          */
-                        ListTagHoldsResponse.fromObject = function fromObject(object) {
+                        ListTagHoldsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListTagHoldsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListTagHoldsResponse();
                             if (object.tagHolds) {
                                 if (!Array.isArray(object.tagHolds))
@@ -14405,7 +15073,7 @@
                                 for (var i = 0; i < object.tagHolds.length; ++i) {
                                     if (typeof object.tagHolds[i] !== "object")
                                         throw TypeError(".google.cloud.resourcemanager.v3.ListTagHoldsResponse.tagHolds: object expected");
-                                    message.tagHolds[i] = $root.google.cloud.resourcemanager.v3.TagHold.fromObject(object.tagHolds[i]);
+                                    message.tagHolds[i] = $root.google.cloud.resourcemanager.v3.TagHold.fromObject(object.tagHolds[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -14831,7 +15499,7 @@
                             this.purposeData = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14987,9 +15655,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TagKey.decode = function decode(reader, length, error) {
+                        TagKey.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.TagKey(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15017,11 +15689,11 @@
                                         break;
                                     }
                                 case 6: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
@@ -15048,15 +15720,17 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.purposeData, key);
                                         message.purposeData[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15087,9 +15761,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TagKey.verify = function verify(message) {
+                        TagKey.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -15106,12 +15784,12 @@
                                 if (!$util.isString(message.description))
                                     return "description: string expected";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -15145,9 +15823,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.TagKey} TagKey
                          */
-                        TagKey.fromObject = function fromObject(object) {
+                        TagKey.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.TagKey)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.TagKey();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -15162,12 +15844,12 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.TagKey.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.TagKey.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.etag != null)
                                 message.etag = String(object.etag);
@@ -15191,8 +15873,11 @@
                                 if (typeof object.purposeData !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.TagKey.purposeData: object expected");
                                 message.purposeData = {};
-                                for (var keys = Object.keys(object.purposeData), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.purposeData), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.purposeData, keys[i]);
                                     message.purposeData[keys[i]] = String(object.purposeData[keys[i]]);
+                                }
                             }
                             return message;
                         };
@@ -15244,8 +15929,11 @@
                             var keys2;
                             if (message.purposeData && (keys2 = Object.keys(message.purposeData)).length) {
                                 object.purposeData = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.purposeData, keys2[j]);
                                     object.purposeData[keys2[j]] = message.purposeData[keys2[j]];
+                                }
                             }
                             return object;
                         };
@@ -15301,7 +15989,7 @@
                         function ListTagKeysRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15386,9 +16074,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListTagKeysRequest.decode = function decode(reader, length, error) {
+                        ListTagKeysRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListTagKeysRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15408,7 +16100,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15439,9 +16131,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListTagKeysRequest.verify = function verify(message) {
+                        ListTagKeysRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -15462,9 +16158,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListTagKeysRequest} ListTagKeysRequest
                          */
-                        ListTagKeysRequest.fromObject = function fromObject(object) {
+                        ListTagKeysRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListTagKeysRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListTagKeysRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -15553,7 +16253,7 @@
                             this.tagKeys = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15629,9 +16329,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListTagKeysResponse.decode = function decode(reader, length, error) {
+                        ListTagKeysResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListTagKeysResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15641,7 +16345,7 @@
                                 case 1: {
                                         if (!(message.tagKeys && message.tagKeys.length))
                                             message.tagKeys = [];
-                                        message.tagKeys.push($root.google.cloud.resourcemanager.v3.TagKey.decode(reader, reader.uint32()));
+                                        message.tagKeys.push($root.google.cloud.resourcemanager.v3.TagKey.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -15649,7 +16353,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15680,14 +16384,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListTagKeysResponse.verify = function verify(message) {
+                        ListTagKeysResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tagKeys != null && message.hasOwnProperty("tagKeys")) {
                                 if (!Array.isArray(message.tagKeys))
                                     return "tagKeys: array expected";
                                 for (var i = 0; i < message.tagKeys.length; ++i) {
-                                    var error = $root.google.cloud.resourcemanager.v3.TagKey.verify(message.tagKeys[i]);
+                                    var error = $root.google.cloud.resourcemanager.v3.TagKey.verify(message.tagKeys[i], long + 1);
                                     if (error)
                                         return "tagKeys." + error;
                                 }
@@ -15706,9 +16414,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListTagKeysResponse} ListTagKeysResponse
                          */
-                        ListTagKeysResponse.fromObject = function fromObject(object) {
+                        ListTagKeysResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListTagKeysResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListTagKeysResponse();
                             if (object.tagKeys) {
                                 if (!Array.isArray(object.tagKeys))
@@ -15717,7 +16429,7 @@
                                 for (var i = 0; i < object.tagKeys.length; ++i) {
                                     if (typeof object.tagKeys[i] !== "object")
                                         throw TypeError(".google.cloud.resourcemanager.v3.ListTagKeysResponse.tagKeys: object expected");
-                                    message.tagKeys[i] = $root.google.cloud.resourcemanager.v3.TagKey.fromObject(object.tagKeys[i]);
+                                    message.tagKeys[i] = $root.google.cloud.resourcemanager.v3.TagKey.fromObject(object.tagKeys[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -15801,7 +16513,7 @@
                         function GetTagKeyRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15866,9 +16578,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetTagKeyRequest.decode = function decode(reader, length, error) {
+                        GetTagKeyRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.GetTagKeyRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15880,7 +16596,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15911,9 +16627,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetTagKeyRequest.verify = function verify(message) {
+                        GetTagKeyRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -15928,9 +16648,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.GetTagKeyRequest} GetTagKeyRequest
                          */
-                        GetTagKeyRequest.fromObject = function fromObject(object) {
+                        GetTagKeyRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.GetTagKeyRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.GetTagKeyRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -16006,7 +16730,7 @@
                         function GetNamespacedTagKeyRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16071,9 +16795,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetNamespacedTagKeyRequest.decode = function decode(reader, length, error) {
+                        GetNamespacedTagKeyRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.GetNamespacedTagKeyRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16085,7 +16813,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16116,9 +16844,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetNamespacedTagKeyRequest.verify = function verify(message) {
+                        GetNamespacedTagKeyRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -16133,9 +16865,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.GetNamespacedTagKeyRequest} GetNamespacedTagKeyRequest
                          */
-                        GetNamespacedTagKeyRequest.fromObject = function fromObject(object) {
+                        GetNamespacedTagKeyRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.GetNamespacedTagKeyRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.GetNamespacedTagKeyRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -16212,7 +16948,7 @@
                         function CreateTagKeyRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16287,9 +17023,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateTagKeyRequest.decode = function decode(reader, length, error) {
+                        CreateTagKeyRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateTagKeyRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16297,7 +17037,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.tagKey = $root.google.cloud.resourcemanager.v3.TagKey.decode(reader, reader.uint32());
+                                        message.tagKey = $root.google.cloud.resourcemanager.v3.TagKey.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
@@ -16305,7 +17045,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16336,11 +17076,15 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateTagKeyRequest.verify = function verify(message) {
+                        CreateTagKeyRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tagKey != null && message.hasOwnProperty("tagKey")) {
-                                var error = $root.google.cloud.resourcemanager.v3.TagKey.verify(message.tagKey);
+                                var error = $root.google.cloud.resourcemanager.v3.TagKey.verify(message.tagKey, long + 1);
                                 if (error)
                                     return "tagKey." + error;
                             }
@@ -16358,14 +17102,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateTagKeyRequest} CreateTagKeyRequest
                          */
-                        CreateTagKeyRequest.fromObject = function fromObject(object) {
+                        CreateTagKeyRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateTagKeyRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.CreateTagKeyRequest();
                             if (object.tagKey != null) {
                                 if (typeof object.tagKey !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.CreateTagKeyRequest.tagKey: object expected");
-                                message.tagKey = $root.google.cloud.resourcemanager.v3.TagKey.fromObject(object.tagKey);
+                                message.tagKey = $root.google.cloud.resourcemanager.v3.TagKey.fromObject(object.tagKey, long + 1);
                             }
                             if (object.validateOnly != null)
                                 message.validateOnly = Boolean(object.validateOnly);
@@ -16444,7 +17192,7 @@
                         function CreateTagKeyMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16499,9 +17247,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateTagKeyMetadata.decode = function decode(reader, length, error) {
+                        CreateTagKeyMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateTagKeyMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16509,7 +17261,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16540,9 +17292,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateTagKeyMetadata.verify = function verify(message) {
+                        CreateTagKeyMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -16554,9 +17310,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateTagKeyMetadata} CreateTagKeyMetadata
                          */
-                        CreateTagKeyMetadata.fromObject = function fromObject(object) {
+                        CreateTagKeyMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateTagKeyMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.CreateTagKeyMetadata();
                         };
     
@@ -16624,7 +17384,7 @@
                         function UpdateTagKeyRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16709,9 +17469,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateTagKeyRequest.decode = function decode(reader, length, error) {
+                        UpdateTagKeyRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UpdateTagKeyRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16719,11 +17483,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.tagKey = $root.google.cloud.resourcemanager.v3.TagKey.decode(reader, reader.uint32());
+                                        message.tagKey = $root.google.cloud.resourcemanager.v3.TagKey.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -16731,7 +17495,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16762,16 +17526,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateTagKeyRequest.verify = function verify(message) {
+                        UpdateTagKeyRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tagKey != null && message.hasOwnProperty("tagKey")) {
-                                var error = $root.google.cloud.resourcemanager.v3.TagKey.verify(message.tagKey);
+                                var error = $root.google.cloud.resourcemanager.v3.TagKey.verify(message.tagKey, long + 1);
                                 if (error)
                                     return "tagKey." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -16789,19 +17557,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UpdateTagKeyRequest} UpdateTagKeyRequest
                          */
-                        UpdateTagKeyRequest.fromObject = function fromObject(object) {
+                        UpdateTagKeyRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UpdateTagKeyRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.UpdateTagKeyRequest();
                             if (object.tagKey != null) {
                                 if (typeof object.tagKey !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.UpdateTagKeyRequest.tagKey: object expected");
-                                message.tagKey = $root.google.cloud.resourcemanager.v3.TagKey.fromObject(object.tagKey);
+                                message.tagKey = $root.google.cloud.resourcemanager.v3.TagKey.fromObject(object.tagKey, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.UpdateTagKeyRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             if (object.validateOnly != null)
                                 message.validateOnly = Boolean(object.validateOnly);
@@ -16883,7 +17655,7 @@
                         function UpdateTagKeyMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16938,9 +17710,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateTagKeyMetadata.decode = function decode(reader, length, error) {
+                        UpdateTagKeyMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UpdateTagKeyMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16948,7 +17724,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16979,9 +17755,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateTagKeyMetadata.verify = function verify(message) {
+                        UpdateTagKeyMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -16993,9 +17773,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UpdateTagKeyMetadata} UpdateTagKeyMetadata
                          */
-                        UpdateTagKeyMetadata.fromObject = function fromObject(object) {
+                        UpdateTagKeyMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UpdateTagKeyMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.UpdateTagKeyMetadata();
                         };
     
@@ -17063,7 +17847,7 @@
                         function DeleteTagKeyRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -17148,9 +17932,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteTagKeyRequest.decode = function decode(reader, length, error) {
+                        DeleteTagKeyRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteTagKeyRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -17170,7 +17958,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -17201,9 +17989,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteTagKeyRequest.verify = function verify(message) {
+                        DeleteTagKeyRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -17224,9 +18016,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteTagKeyRequest} DeleteTagKeyRequest
                          */
-                        DeleteTagKeyRequest.fromObject = function fromObject(object) {
+                        DeleteTagKeyRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteTagKeyRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.DeleteTagKeyRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -17312,7 +18108,7 @@
                         function DeleteTagKeyMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -17367,9 +18163,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteTagKeyMetadata.decode = function decode(reader, length, error) {
+                        DeleteTagKeyMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteTagKeyMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -17377,7 +18177,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -17408,9 +18208,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteTagKeyMetadata.verify = function verify(message) {
+                        DeleteTagKeyMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -17422,9 +18226,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteTagKeyMetadata} DeleteTagKeyMetadata
                          */
-                        DeleteTagKeyMetadata.fromObject = function fromObject(object) {
+                        DeleteTagKeyMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteTagKeyMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.DeleteTagKeyMetadata();
                         };
     
@@ -17843,7 +18651,7 @@
                         function TagValue(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -17978,9 +18786,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TagValue.decode = function decode(reader, length, error) {
+                        TagValue.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.TagValue();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -18008,11 +18820,11 @@
                                         break;
                                     }
                                 case 6: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
@@ -18020,7 +18832,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -18051,9 +18863,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TagValue.verify = function verify(message) {
+                        TagValue.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -18070,12 +18886,12 @@
                                 if (!$util.isString(message.description))
                                     return "description: string expected";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -18093,9 +18909,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.TagValue} TagValue
                          */
-                        TagValue.fromObject = function fromObject(object) {
+                        TagValue.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.TagValue)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.TagValue();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -18110,12 +18930,12 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.TagValue.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.TagValue.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.etag != null)
                                 message.etag = String(object.etag);
@@ -18215,7 +19035,7 @@
                         function ListTagValuesRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -18300,9 +19120,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListTagValuesRequest.decode = function decode(reader, length, error) {
+                        ListTagValuesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListTagValuesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -18322,7 +19146,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -18353,9 +19177,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListTagValuesRequest.verify = function verify(message) {
+                        ListTagValuesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -18376,9 +19204,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListTagValuesRequest} ListTagValuesRequest
                          */
-                        ListTagValuesRequest.fromObject = function fromObject(object) {
+                        ListTagValuesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListTagValuesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListTagValuesRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -18467,7 +19299,7 @@
                             this.tagValues = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -18543,9 +19375,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListTagValuesResponse.decode = function decode(reader, length, error) {
+                        ListTagValuesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.ListTagValuesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -18555,7 +19391,7 @@
                                 case 1: {
                                         if (!(message.tagValues && message.tagValues.length))
                                             message.tagValues = [];
-                                        message.tagValues.push($root.google.cloud.resourcemanager.v3.TagValue.decode(reader, reader.uint32()));
+                                        message.tagValues.push($root.google.cloud.resourcemanager.v3.TagValue.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -18563,7 +19399,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -18594,14 +19430,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListTagValuesResponse.verify = function verify(message) {
+                        ListTagValuesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tagValues != null && message.hasOwnProperty("tagValues")) {
                                 if (!Array.isArray(message.tagValues))
                                     return "tagValues: array expected";
                                 for (var i = 0; i < message.tagValues.length; ++i) {
-                                    var error = $root.google.cloud.resourcemanager.v3.TagValue.verify(message.tagValues[i]);
+                                    var error = $root.google.cloud.resourcemanager.v3.TagValue.verify(message.tagValues[i], long + 1);
                                     if (error)
                                         return "tagValues." + error;
                                 }
@@ -18620,9 +19460,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.ListTagValuesResponse} ListTagValuesResponse
                          */
-                        ListTagValuesResponse.fromObject = function fromObject(object) {
+                        ListTagValuesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.ListTagValuesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.ListTagValuesResponse();
                             if (object.tagValues) {
                                 if (!Array.isArray(object.tagValues))
@@ -18631,7 +19475,7 @@
                                 for (var i = 0; i < object.tagValues.length; ++i) {
                                     if (typeof object.tagValues[i] !== "object")
                                         throw TypeError(".google.cloud.resourcemanager.v3.ListTagValuesResponse.tagValues: object expected");
-                                    message.tagValues[i] = $root.google.cloud.resourcemanager.v3.TagValue.fromObject(object.tagValues[i]);
+                                    message.tagValues[i] = $root.google.cloud.resourcemanager.v3.TagValue.fromObject(object.tagValues[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -18715,7 +19559,7 @@
                         function GetTagValueRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -18780,9 +19624,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetTagValueRequest.decode = function decode(reader, length, error) {
+                        GetTagValueRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.GetTagValueRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -18794,7 +19642,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -18825,9 +19673,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetTagValueRequest.verify = function verify(message) {
+                        GetTagValueRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -18842,9 +19694,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.GetTagValueRequest} GetTagValueRequest
                          */
-                        GetTagValueRequest.fromObject = function fromObject(object) {
+                        GetTagValueRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.GetTagValueRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.GetTagValueRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -18920,7 +19776,7 @@
                         function GetNamespacedTagValueRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -18985,9 +19841,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetNamespacedTagValueRequest.decode = function decode(reader, length, error) {
+                        GetNamespacedTagValueRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.GetNamespacedTagValueRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -18999,7 +19859,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -19030,9 +19890,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetNamespacedTagValueRequest.verify = function verify(message) {
+                        GetNamespacedTagValueRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -19047,9 +19911,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.GetNamespacedTagValueRequest} GetNamespacedTagValueRequest
                          */
-                        GetNamespacedTagValueRequest.fromObject = function fromObject(object) {
+                        GetNamespacedTagValueRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.GetNamespacedTagValueRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.GetNamespacedTagValueRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -19126,7 +19994,7 @@
                         function CreateTagValueRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -19201,9 +20069,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateTagValueRequest.decode = function decode(reader, length, error) {
+                        CreateTagValueRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateTagValueRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -19211,7 +20083,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.tagValue = $root.google.cloud.resourcemanager.v3.TagValue.decode(reader, reader.uint32());
+                                        message.tagValue = $root.google.cloud.resourcemanager.v3.TagValue.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
@@ -19219,7 +20091,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -19250,11 +20122,15 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateTagValueRequest.verify = function verify(message) {
+                        CreateTagValueRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tagValue != null && message.hasOwnProperty("tagValue")) {
-                                var error = $root.google.cloud.resourcemanager.v3.TagValue.verify(message.tagValue);
+                                var error = $root.google.cloud.resourcemanager.v3.TagValue.verify(message.tagValue, long + 1);
                                 if (error)
                                     return "tagValue." + error;
                             }
@@ -19272,14 +20148,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateTagValueRequest} CreateTagValueRequest
                          */
-                        CreateTagValueRequest.fromObject = function fromObject(object) {
+                        CreateTagValueRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateTagValueRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.CreateTagValueRequest();
                             if (object.tagValue != null) {
                                 if (typeof object.tagValue !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.CreateTagValueRequest.tagValue: object expected");
-                                message.tagValue = $root.google.cloud.resourcemanager.v3.TagValue.fromObject(object.tagValue);
+                                message.tagValue = $root.google.cloud.resourcemanager.v3.TagValue.fromObject(object.tagValue, long + 1);
                             }
                             if (object.validateOnly != null)
                                 message.validateOnly = Boolean(object.validateOnly);
@@ -19358,7 +20238,7 @@
                         function CreateTagValueMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -19413,9 +20293,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateTagValueMetadata.decode = function decode(reader, length, error) {
+                        CreateTagValueMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.CreateTagValueMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -19423,7 +20307,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -19454,9 +20338,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateTagValueMetadata.verify = function verify(message) {
+                        CreateTagValueMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -19468,9 +20356,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.CreateTagValueMetadata} CreateTagValueMetadata
                          */
-                        CreateTagValueMetadata.fromObject = function fromObject(object) {
+                        CreateTagValueMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.CreateTagValueMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.CreateTagValueMetadata();
                         };
     
@@ -19538,7 +20430,7 @@
                         function UpdateTagValueRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -19623,9 +20515,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateTagValueRequest.decode = function decode(reader, length, error) {
+                        UpdateTagValueRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UpdateTagValueRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -19633,11 +20529,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.tagValue = $root.google.cloud.resourcemanager.v3.TagValue.decode(reader, reader.uint32());
+                                        message.tagValue = $root.google.cloud.resourcemanager.v3.TagValue.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -19645,7 +20541,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -19676,16 +20572,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateTagValueRequest.verify = function verify(message) {
+                        UpdateTagValueRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tagValue != null && message.hasOwnProperty("tagValue")) {
-                                var error = $root.google.cloud.resourcemanager.v3.TagValue.verify(message.tagValue);
+                                var error = $root.google.cloud.resourcemanager.v3.TagValue.verify(message.tagValue, long + 1);
                                 if (error)
                                     return "tagValue." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -19703,19 +20603,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UpdateTagValueRequest} UpdateTagValueRequest
                          */
-                        UpdateTagValueRequest.fromObject = function fromObject(object) {
+                        UpdateTagValueRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UpdateTagValueRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.UpdateTagValueRequest();
                             if (object.tagValue != null) {
                                 if (typeof object.tagValue !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.UpdateTagValueRequest.tagValue: object expected");
-                                message.tagValue = $root.google.cloud.resourcemanager.v3.TagValue.fromObject(object.tagValue);
+                                message.tagValue = $root.google.cloud.resourcemanager.v3.TagValue.fromObject(object.tagValue, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.resourcemanager.v3.UpdateTagValueRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             if (object.validateOnly != null)
                                 message.validateOnly = Boolean(object.validateOnly);
@@ -19797,7 +20701,7 @@
                         function UpdateTagValueMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -19852,9 +20756,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateTagValueMetadata.decode = function decode(reader, length, error) {
+                        UpdateTagValueMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.UpdateTagValueMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -19862,7 +20770,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -19893,9 +20801,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateTagValueMetadata.verify = function verify(message) {
+                        UpdateTagValueMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -19907,9 +20819,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.UpdateTagValueMetadata} UpdateTagValueMetadata
                          */
-                        UpdateTagValueMetadata.fromObject = function fromObject(object) {
+                        UpdateTagValueMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.UpdateTagValueMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.UpdateTagValueMetadata();
                         };
     
@@ -19977,7 +20893,7 @@
                         function DeleteTagValueRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -20062,9 +20978,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteTagValueRequest.decode = function decode(reader, length, error) {
+                        DeleteTagValueRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteTagValueRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -20084,7 +21004,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -20115,9 +21035,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteTagValueRequest.verify = function verify(message) {
+                        DeleteTagValueRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -20138,9 +21062,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteTagValueRequest} DeleteTagValueRequest
                          */
-                        DeleteTagValueRequest.fromObject = function fromObject(object) {
+                        DeleteTagValueRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteTagValueRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.resourcemanager.v3.DeleteTagValueRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -20226,7 +21154,7 @@
                         function DeleteTagValueMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -20281,9 +21209,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteTagValueMetadata.decode = function decode(reader, length, error) {
+                        DeleteTagValueMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.resourcemanager.v3.DeleteTagValueMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -20291,7 +21223,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -20322,9 +21254,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteTagValueMetadata.verify = function verify(message) {
+                        DeleteTagValueMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -20336,9 +21272,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.resourcemanager.v3.DeleteTagValueMetadata} DeleteTagValueMetadata
                          */
-                        DeleteTagValueMetadata.fromObject = function fromObject(object) {
+                        DeleteTagValueMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.resourcemanager.v3.DeleteTagValueMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.resourcemanager.v3.DeleteTagValueMetadata();
                         };
     
@@ -20424,7 +21364,7 @@
                     this.rules = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -20500,9 +21440,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Http.decode = function decode(reader, length, error) {
+                Http.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Http();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -20512,7 +21456,7 @@
                         case 1: {
                                 if (!(message.rules && message.rules.length))
                                     message.rules = [];
-                                message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32()));
+                                message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
@@ -20520,7 +21464,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -20551,14 +21495,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Http.verify = function verify(message) {
+                Http.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.rules != null && message.hasOwnProperty("rules")) {
                         if (!Array.isArray(message.rules))
                             return "rules: array expected";
                         for (var i = 0; i < message.rules.length; ++i) {
-                            var error = $root.google.api.HttpRule.verify(message.rules[i]);
+                            var error = $root.google.api.HttpRule.verify(message.rules[i], long + 1);
                             if (error)
                                 return "rules." + error;
                         }
@@ -20577,9 +21525,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.Http} Http
                  */
-                Http.fromObject = function fromObject(object) {
+                Http.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.Http)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.Http();
                     if (object.rules) {
                         if (!Array.isArray(object.rules))
@@ -20588,7 +21540,7 @@
                         for (var i = 0; i < object.rules.length; ++i) {
                             if (typeof object.rules[i] !== "object")
                                 throw TypeError(".google.api.Http.rules: object expected");
-                            message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i]);
+                            message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i], long + 1);
                         }
                     }
                     if (object.fullyDecodeReservedExpansion != null)
@@ -20682,7 +21634,7 @@
                     this.additionalBindings = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -20852,9 +21804,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                HttpRule.decode = function decode(reader, length, error) {
+                HttpRule.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.HttpRule();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -20886,7 +21842,7 @@
                                 break;
                             }
                         case 8: {
-                                message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32());
+                                message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 7: {
@@ -20900,11 +21856,11 @@
                         case 11: {
                                 if (!(message.additionalBindings && message.additionalBindings.length))
                                     message.additionalBindings = [];
-                                message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32()));
+                                message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -20935,9 +21891,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                HttpRule.verify = function verify(message) {
+                HttpRule.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.selector != null && message.hasOwnProperty("selector"))
                         if (!$util.isString(message.selector))
@@ -20980,7 +21940,7 @@
                             return "pattern: multiple values";
                         properties.pattern = 1;
                         {
-                            var error = $root.google.api.CustomHttpPattern.verify(message.custom);
+                            var error = $root.google.api.CustomHttpPattern.verify(message.custom, long + 1);
                             if (error)
                                 return "custom." + error;
                         }
@@ -20995,7 +21955,7 @@
                         if (!Array.isArray(message.additionalBindings))
                             return "additionalBindings: array expected";
                         for (var i = 0; i < message.additionalBindings.length; ++i) {
-                            var error = $root.google.api.HttpRule.verify(message.additionalBindings[i]);
+                            var error = $root.google.api.HttpRule.verify(message.additionalBindings[i], long + 1);
                             if (error)
                                 return "additionalBindings." + error;
                         }
@@ -21011,9 +21971,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.HttpRule} HttpRule
                  */
-                HttpRule.fromObject = function fromObject(object) {
+                HttpRule.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.HttpRule)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.HttpRule();
                     if (object.selector != null)
                         message.selector = String(object.selector);
@@ -21030,7 +21994,7 @@
                     if (object.custom != null) {
                         if (typeof object.custom !== "object")
                             throw TypeError(".google.api.HttpRule.custom: object expected");
-                        message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom);
+                        message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom, long + 1);
                     }
                     if (object.body != null)
                         message.body = String(object.body);
@@ -21043,7 +22007,7 @@
                         for (var i = 0; i < object.additionalBindings.length; ++i) {
                             if (typeof object.additionalBindings[i] !== "object")
                                 throw TypeError(".google.api.HttpRule.additionalBindings: object expected");
-                            message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i]);
+                            message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i], long + 1);
                         }
                     }
                     return message;
@@ -21163,7 +22127,7 @@
                 function CustomHttpPattern(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -21238,9 +22202,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CustomHttpPattern.decode = function decode(reader, length, error) {
+                CustomHttpPattern.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CustomHttpPattern();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -21256,7 +22224,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -21287,9 +22255,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CustomHttpPattern.verify = function verify(message) {
+                CustomHttpPattern.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.kind != null && message.hasOwnProperty("kind"))
                         if (!$util.isString(message.kind))
                             return "kind: string expected";
@@ -21307,9 +22279,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CustomHttpPattern} CustomHttpPattern
                  */
-                CustomHttpPattern.fromObject = function fromObject(object) {
+                CustomHttpPattern.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CustomHttpPattern)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CustomHttpPattern();
                     if (object.kind != null)
                         message.kind = String(object.kind);
@@ -21394,7 +22370,7 @@
                     this.destinations = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -21483,9 +22459,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CommonLanguageSettings.decode = function decode(reader, length, error) {
+                CommonLanguageSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CommonLanguageSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -21508,11 +22488,11 @@
                                 break;
                             }
                         case 3: {
-                                message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.decode(reader, reader.uint32());
+                                message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -21543,9 +22523,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CommonLanguageSettings.verify = function verify(message) {
+                CommonLanguageSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.referenceDocsUri != null && message.hasOwnProperty("referenceDocsUri"))
                         if (!$util.isString(message.referenceDocsUri))
                             return "referenceDocsUri: string expected";
@@ -21563,7 +22547,7 @@
                             }
                     }
                     if (message.selectiveGapicGeneration != null && message.hasOwnProperty("selectiveGapicGeneration")) {
-                        var error = $root.google.api.SelectiveGapicGeneration.verify(message.selectiveGapicGeneration);
+                        var error = $root.google.api.SelectiveGapicGeneration.verify(message.selectiveGapicGeneration, long + 1);
                         if (error)
                             return "selectiveGapicGeneration." + error;
                     }
@@ -21578,9 +22562,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CommonLanguageSettings} CommonLanguageSettings
                  */
-                CommonLanguageSettings.fromObject = function fromObject(object) {
+                CommonLanguageSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CommonLanguageSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CommonLanguageSettings();
                     if (object.referenceDocsUri != null)
                         message.referenceDocsUri = String(object.referenceDocsUri);
@@ -21612,7 +22600,7 @@
                     if (object.selectiveGapicGeneration != null) {
                         if (typeof object.selectiveGapicGeneration !== "object")
                             throw TypeError(".google.api.CommonLanguageSettings.selectiveGapicGeneration: object expected");
-                        message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.fromObject(object.selectiveGapicGeneration);
+                        message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.fromObject(object.selectiveGapicGeneration, long + 1);
                     }
                     return message;
                 };
@@ -21707,7 +22695,7 @@
                 function ClientLibrarySettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -21872,9 +22860,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ClientLibrarySettings.decode = function decode(reader, length, error) {
+                ClientLibrarySettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ClientLibrarySettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -21894,39 +22886,39 @@
                                 break;
                             }
                         case 21: {
-                                message.javaSettings = $root.google.api.JavaSettings.decode(reader, reader.uint32());
+                                message.javaSettings = $root.google.api.JavaSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 22: {
-                                message.cppSettings = $root.google.api.CppSettings.decode(reader, reader.uint32());
+                                message.cppSettings = $root.google.api.CppSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 23: {
-                                message.phpSettings = $root.google.api.PhpSettings.decode(reader, reader.uint32());
+                                message.phpSettings = $root.google.api.PhpSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 24: {
-                                message.pythonSettings = $root.google.api.PythonSettings.decode(reader, reader.uint32());
+                                message.pythonSettings = $root.google.api.PythonSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 25: {
-                                message.nodeSettings = $root.google.api.NodeSettings.decode(reader, reader.uint32());
+                                message.nodeSettings = $root.google.api.NodeSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 26: {
-                                message.dotnetSettings = $root.google.api.DotnetSettings.decode(reader, reader.uint32());
+                                message.dotnetSettings = $root.google.api.DotnetSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 27: {
-                                message.rubySettings = $root.google.api.RubySettings.decode(reader, reader.uint32());
+                                message.rubySettings = $root.google.api.RubySettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 28: {
-                                message.goSettings = $root.google.api.GoSettings.decode(reader, reader.uint32());
+                                message.goSettings = $root.google.api.GoSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -21957,9 +22949,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ClientLibrarySettings.verify = function verify(message) {
+                ClientLibrarySettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.version != null && message.hasOwnProperty("version"))
                         if (!$util.isString(message.version))
                             return "version: string expected";
@@ -21981,42 +22977,42 @@
                         if (typeof message.restNumericEnums !== "boolean")
                             return "restNumericEnums: boolean expected";
                     if (message.javaSettings != null && message.hasOwnProperty("javaSettings")) {
-                        var error = $root.google.api.JavaSettings.verify(message.javaSettings);
+                        var error = $root.google.api.JavaSettings.verify(message.javaSettings, long + 1);
                         if (error)
                             return "javaSettings." + error;
                     }
                     if (message.cppSettings != null && message.hasOwnProperty("cppSettings")) {
-                        var error = $root.google.api.CppSettings.verify(message.cppSettings);
+                        var error = $root.google.api.CppSettings.verify(message.cppSettings, long + 1);
                         if (error)
                             return "cppSettings." + error;
                     }
                     if (message.phpSettings != null && message.hasOwnProperty("phpSettings")) {
-                        var error = $root.google.api.PhpSettings.verify(message.phpSettings);
+                        var error = $root.google.api.PhpSettings.verify(message.phpSettings, long + 1);
                         if (error)
                             return "phpSettings." + error;
                     }
                     if (message.pythonSettings != null && message.hasOwnProperty("pythonSettings")) {
-                        var error = $root.google.api.PythonSettings.verify(message.pythonSettings);
+                        var error = $root.google.api.PythonSettings.verify(message.pythonSettings, long + 1);
                         if (error)
                             return "pythonSettings." + error;
                     }
                     if (message.nodeSettings != null && message.hasOwnProperty("nodeSettings")) {
-                        var error = $root.google.api.NodeSettings.verify(message.nodeSettings);
+                        var error = $root.google.api.NodeSettings.verify(message.nodeSettings, long + 1);
                         if (error)
                             return "nodeSettings." + error;
                     }
                     if (message.dotnetSettings != null && message.hasOwnProperty("dotnetSettings")) {
-                        var error = $root.google.api.DotnetSettings.verify(message.dotnetSettings);
+                        var error = $root.google.api.DotnetSettings.verify(message.dotnetSettings, long + 1);
                         if (error)
                             return "dotnetSettings." + error;
                     }
                     if (message.rubySettings != null && message.hasOwnProperty("rubySettings")) {
-                        var error = $root.google.api.RubySettings.verify(message.rubySettings);
+                        var error = $root.google.api.RubySettings.verify(message.rubySettings, long + 1);
                         if (error)
                             return "rubySettings." + error;
                     }
                     if (message.goSettings != null && message.hasOwnProperty("goSettings")) {
-                        var error = $root.google.api.GoSettings.verify(message.goSettings);
+                        var error = $root.google.api.GoSettings.verify(message.goSettings, long + 1);
                         if (error)
                             return "goSettings." + error;
                     }
@@ -22031,9 +23027,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ClientLibrarySettings} ClientLibrarySettings
                  */
-                ClientLibrarySettings.fromObject = function fromObject(object) {
+                ClientLibrarySettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ClientLibrarySettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ClientLibrarySettings();
                     if (object.version != null)
                         message.version = String(object.version);
@@ -22082,42 +23082,42 @@
                     if (object.javaSettings != null) {
                         if (typeof object.javaSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.javaSettings: object expected");
-                        message.javaSettings = $root.google.api.JavaSettings.fromObject(object.javaSettings);
+                        message.javaSettings = $root.google.api.JavaSettings.fromObject(object.javaSettings, long + 1);
                     }
                     if (object.cppSettings != null) {
                         if (typeof object.cppSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.cppSettings: object expected");
-                        message.cppSettings = $root.google.api.CppSettings.fromObject(object.cppSettings);
+                        message.cppSettings = $root.google.api.CppSettings.fromObject(object.cppSettings, long + 1);
                     }
                     if (object.phpSettings != null) {
                         if (typeof object.phpSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.phpSettings: object expected");
-                        message.phpSettings = $root.google.api.PhpSettings.fromObject(object.phpSettings);
+                        message.phpSettings = $root.google.api.PhpSettings.fromObject(object.phpSettings, long + 1);
                     }
                     if (object.pythonSettings != null) {
                         if (typeof object.pythonSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.pythonSettings: object expected");
-                        message.pythonSettings = $root.google.api.PythonSettings.fromObject(object.pythonSettings);
+                        message.pythonSettings = $root.google.api.PythonSettings.fromObject(object.pythonSettings, long + 1);
                     }
                     if (object.nodeSettings != null) {
                         if (typeof object.nodeSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.nodeSettings: object expected");
-                        message.nodeSettings = $root.google.api.NodeSettings.fromObject(object.nodeSettings);
+                        message.nodeSettings = $root.google.api.NodeSettings.fromObject(object.nodeSettings, long + 1);
                     }
                     if (object.dotnetSettings != null) {
                         if (typeof object.dotnetSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.dotnetSettings: object expected");
-                        message.dotnetSettings = $root.google.api.DotnetSettings.fromObject(object.dotnetSettings);
+                        message.dotnetSettings = $root.google.api.DotnetSettings.fromObject(object.dotnetSettings, long + 1);
                     }
                     if (object.rubySettings != null) {
                         if (typeof object.rubySettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.rubySettings: object expected");
-                        message.rubySettings = $root.google.api.RubySettings.fromObject(object.rubySettings);
+                        message.rubySettings = $root.google.api.RubySettings.fromObject(object.rubySettings, long + 1);
                     }
                     if (object.goSettings != null) {
                         if (typeof object.goSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.goSettings: object expected");
-                        message.goSettings = $root.google.api.GoSettings.fromObject(object.goSettings);
+                        message.goSettings = $root.google.api.GoSettings.fromObject(object.goSettings, long + 1);
                     }
                     return message;
                 };
@@ -22235,7 +23235,7 @@
                     this.librarySettings = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -22403,9 +23403,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Publishing.decode = function decode(reader, length, error) {
+                Publishing.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Publishing();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -22415,7 +23419,7 @@
                         case 2: {
                                 if (!(message.methodSettings && message.methodSettings.length))
                                     message.methodSettings = [];
-                                message.methodSettings.push($root.google.api.MethodSettings.decode(reader, reader.uint32()));
+                                message.methodSettings.push($root.google.api.MethodSettings.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 101: {
@@ -22451,7 +23455,7 @@
                         case 109: {
                                 if (!(message.librarySettings && message.librarySettings.length))
                                     message.librarySettings = [];
-                                message.librarySettings.push($root.google.api.ClientLibrarySettings.decode(reader, reader.uint32()));
+                                message.librarySettings.push($root.google.api.ClientLibrarySettings.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 110: {
@@ -22463,7 +23467,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -22494,14 +23498,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Publishing.verify = function verify(message) {
+                Publishing.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.methodSettings != null && message.hasOwnProperty("methodSettings")) {
                         if (!Array.isArray(message.methodSettings))
                             return "methodSettings: array expected";
                         for (var i = 0; i < message.methodSettings.length; ++i) {
-                            var error = $root.google.api.MethodSettings.verify(message.methodSettings[i]);
+                            var error = $root.google.api.MethodSettings.verify(message.methodSettings[i], long + 1);
                             if (error)
                                 return "methodSettings." + error;
                         }
@@ -22546,7 +23554,7 @@
                         if (!Array.isArray(message.librarySettings))
                             return "librarySettings: array expected";
                         for (var i = 0; i < message.librarySettings.length; ++i) {
-                            var error = $root.google.api.ClientLibrarySettings.verify(message.librarySettings[i]);
+                            var error = $root.google.api.ClientLibrarySettings.verify(message.librarySettings[i], long + 1);
                             if (error)
                                 return "librarySettings." + error;
                         }
@@ -22568,9 +23576,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.Publishing} Publishing
                  */
-                Publishing.fromObject = function fromObject(object) {
+                Publishing.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.Publishing)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.Publishing();
                     if (object.methodSettings) {
                         if (!Array.isArray(object.methodSettings))
@@ -22579,7 +23591,7 @@
                         for (var i = 0; i < object.methodSettings.length; ++i) {
                             if (typeof object.methodSettings[i] !== "object")
                                 throw TypeError(".google.api.Publishing.methodSettings: object expected");
-                            message.methodSettings[i] = $root.google.api.MethodSettings.fromObject(object.methodSettings[i]);
+                            message.methodSettings[i] = $root.google.api.MethodSettings.fromObject(object.methodSettings[i], long + 1);
                         }
                     }
                     if (object.newIssueUri != null)
@@ -22646,7 +23658,7 @@
                         for (var i = 0; i < object.librarySettings.length; ++i) {
                             if (typeof object.librarySettings[i] !== "object")
                                 throw TypeError(".google.api.Publishing.librarySettings: object expected");
-                            message.librarySettings[i] = $root.google.api.ClientLibrarySettings.fromObject(object.librarySettings[i]);
+                            message.librarySettings[i] = $root.google.api.ClientLibrarySettings.fromObject(object.librarySettings[i], long + 1);
                         }
                     }
                     if (object.protoReferenceDocumentationUri != null)
@@ -22770,7 +23782,7 @@
                     this.serviceClassNames = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -22856,9 +23868,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                JavaSettings.decode = function decode(reader, length, error) {
+                JavaSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.JavaSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -22885,19 +23901,21 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.serviceClassNames, key);
                                 message.serviceClassNames[key] = value;
                                 break;
                             }
                         case 3: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -22928,9 +23946,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                JavaSettings.verify = function verify(message) {
+                JavaSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.libraryPackage != null && message.hasOwnProperty("libraryPackage"))
                         if (!$util.isString(message.libraryPackage))
                             return "libraryPackage: string expected";
@@ -22943,7 +23965,7 @@
                                 return "serviceClassNames: string{k:string} expected";
                     }
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -22958,9 +23980,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.JavaSettings} JavaSettings
                  */
-                JavaSettings.fromObject = function fromObject(object) {
+                JavaSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.JavaSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.JavaSettings();
                     if (object.libraryPackage != null)
                         message.libraryPackage = String(object.libraryPackage);
@@ -22968,13 +23994,16 @@
                         if (typeof object.serviceClassNames !== "object")
                             throw TypeError(".google.api.JavaSettings.serviceClassNames: object expected");
                         message.serviceClassNames = {};
-                        for (var keys = Object.keys(object.serviceClassNames), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.serviceClassNames), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.serviceClassNames, keys[i]);
                             message.serviceClassNames[keys[i]] = String(object.serviceClassNames[keys[i]]);
+                        }
                     }
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.JavaSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -23003,8 +24032,11 @@
                     var keys2;
                     if (message.serviceClassNames && (keys2 = Object.keys(message.serviceClassNames)).length) {
                         object.serviceClassNames = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.serviceClassNames, keys2[j]);
                             object.serviceClassNames[keys2[j]] = message.serviceClassNames[keys2[j]];
+                        }
                     }
                     if (message.common != null && message.hasOwnProperty("common"))
                         object.common = $root.google.api.CommonLanguageSettings.toObject(message.common, options);
@@ -23060,7 +24092,7 @@
                 function CppSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -23125,9 +24157,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CppSettings.decode = function decode(reader, length, error) {
+                CppSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CppSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -23135,11 +24171,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -23170,11 +24206,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CppSettings.verify = function verify(message) {
+                CppSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -23189,14 +24229,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CppSettings} CppSettings
                  */
-                CppSettings.fromObject = function fromObject(object) {
+                CppSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CppSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CppSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.CppSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -23270,7 +24314,7 @@
                 function PhpSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -23335,9 +24379,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                PhpSettings.decode = function decode(reader, length, error) {
+                PhpSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PhpSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -23345,11 +24393,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -23380,11 +24428,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                PhpSettings.verify = function verify(message) {
+                PhpSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -23399,14 +24451,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.PhpSettings} PhpSettings
                  */
-                PhpSettings.fromObject = function fromObject(object) {
+                PhpSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.PhpSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.PhpSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.PhpSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -23481,7 +24537,7 @@
                 function PythonSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -23556,9 +24612,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                PythonSettings.decode = function decode(reader, length, error) {
+                PythonSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PythonSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -23566,15 +24626,15 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
-                                message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.decode(reader, reader.uint32());
+                                message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -23605,16 +24665,20 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                PythonSettings.verify = function verify(message) {
+                PythonSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
                     if (message.experimentalFeatures != null && message.hasOwnProperty("experimentalFeatures")) {
-                        var error = $root.google.api.PythonSettings.ExperimentalFeatures.verify(message.experimentalFeatures);
+                        var error = $root.google.api.PythonSettings.ExperimentalFeatures.verify(message.experimentalFeatures, long + 1);
                         if (error)
                             return "experimentalFeatures." + error;
                     }
@@ -23629,19 +24693,23 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.PythonSettings} PythonSettings
                  */
-                PythonSettings.fromObject = function fromObject(object) {
+                PythonSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.PythonSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.PythonSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.PythonSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.experimentalFeatures != null) {
                         if (typeof object.experimentalFeatures !== "object")
                             throw TypeError(".google.api.PythonSettings.experimentalFeatures: object expected");
-                        message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.fromObject(object.experimentalFeatures);
+                        message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.fromObject(object.experimentalFeatures, long + 1);
                     }
                     return message;
                 };
@@ -23718,7 +24786,7 @@
                     function ExperimentalFeatures(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -23803,9 +24871,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ExperimentalFeatures.decode = function decode(reader, length, error) {
+                    ExperimentalFeatures.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PythonSettings.ExperimentalFeatures();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -23825,7 +24897,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -23856,9 +24928,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ExperimentalFeatures.verify = function verify(message) {
+                    ExperimentalFeatures.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.restAsyncIoEnabled != null && message.hasOwnProperty("restAsyncIoEnabled"))
                             if (typeof message.restAsyncIoEnabled !== "boolean")
                                 return "restAsyncIoEnabled: boolean expected";
@@ -23879,9 +24955,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.api.PythonSettings.ExperimentalFeatures} ExperimentalFeatures
                      */
-                    ExperimentalFeatures.fromObject = function fromObject(object) {
+                    ExperimentalFeatures.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.api.PythonSettings.ExperimentalFeatures)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.api.PythonSettings.ExperimentalFeatures();
                         if (object.restAsyncIoEnabled != null)
                             message.restAsyncIoEnabled = Boolean(object.restAsyncIoEnabled);
@@ -23971,7 +25051,7 @@
                 function NodeSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -24036,9 +25116,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                NodeSettings.decode = function decode(reader, length, error) {
+                NodeSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.NodeSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -24046,11 +25130,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -24081,11 +25165,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                NodeSettings.verify = function verify(message) {
+                NodeSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -24100,14 +25188,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.NodeSettings} NodeSettings
                  */
-                NodeSettings.fromObject = function fromObject(object) {
+                NodeSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.NodeSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.NodeSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.NodeSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -24191,7 +25283,7 @@
                     this.handwrittenSignatures = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -24311,9 +25403,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DotnetSettings.decode = function decode(reader, length, error) {
+                DotnetSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.DotnetSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -24321,7 +25417,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
@@ -24340,10 +25436,12 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedServices, key);
                                 message.renamedServices[key] = value;
                                 break;
                             }
@@ -24363,10 +25461,12 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedResources, key);
                                 message.renamedResources[key] = value;
                                 break;
                             }
@@ -24389,7 +25489,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -24420,11 +25520,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DotnetSettings.verify = function verify(message) {
+                DotnetSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -24476,28 +25580,38 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.DotnetSettings} DotnetSettings
                  */
-                DotnetSettings.fromObject = function fromObject(object) {
+                DotnetSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.DotnetSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.DotnetSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.DotnetSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.renamedServices) {
                         if (typeof object.renamedServices !== "object")
                             throw TypeError(".google.api.DotnetSettings.renamedServices: object expected");
                         message.renamedServices = {};
-                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedServices, keys[i]);
                             message.renamedServices[keys[i]] = String(object.renamedServices[keys[i]]);
+                        }
                     }
                     if (object.renamedResources) {
                         if (typeof object.renamedResources !== "object")
                             throw TypeError(".google.api.DotnetSettings.renamedResources: object expected");
                         message.renamedResources = {};
-                        for (var keys = Object.keys(object.renamedResources), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedResources), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedResources, keys[i]);
                             message.renamedResources[keys[i]] = String(object.renamedResources[keys[i]]);
+                        }
                     }
                     if (object.ignoredResources) {
                         if (!Array.isArray(object.ignoredResources))
@@ -24552,13 +25666,19 @@
                     var keys2;
                     if (message.renamedServices && (keys2 = Object.keys(message.renamedServices)).length) {
                         object.renamedServices = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedServices, keys2[j]);
                             object.renamedServices[keys2[j]] = message.renamedServices[keys2[j]];
+                        }
                     }
                     if (message.renamedResources && (keys2 = Object.keys(message.renamedResources)).length) {
                         object.renamedResources = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedResources, keys2[j]);
                             object.renamedResources[keys2[j]] = message.renamedResources[keys2[j]];
+                        }
                     }
                     if (message.ignoredResources && message.ignoredResources.length) {
                         object.ignoredResources = [];
@@ -24627,7 +25747,7 @@
                 function RubySettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -24692,9 +25812,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                RubySettings.decode = function decode(reader, length, error) {
+                RubySettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.RubySettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -24702,11 +25826,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -24737,11 +25861,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                RubySettings.verify = function verify(message) {
+                RubySettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -24756,14 +25884,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.RubySettings} RubySettings
                  */
-                RubySettings.fromObject = function fromObject(object) {
+                RubySettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.RubySettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.RubySettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.RubySettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -24839,7 +25971,7 @@
                     this.renamedServices = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -24915,9 +26047,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GoSettings.decode = function decode(reader, length, error) {
+                GoSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.GoSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -24925,7 +26061,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
@@ -24944,15 +26080,17 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedServices, key);
                                 message.renamedServices[key] = value;
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -24983,11 +26121,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GoSettings.verify = function verify(message) {
+                GoSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -25010,21 +26152,28 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.GoSettings} GoSettings
                  */
-                GoSettings.fromObject = function fromObject(object) {
+                GoSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.GoSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.GoSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.GoSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.renamedServices) {
                         if (typeof object.renamedServices !== "object")
                             throw TypeError(".google.api.GoSettings.renamedServices: object expected");
                         message.renamedServices = {};
-                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedServices, keys[i]);
                             message.renamedServices[keys[i]] = String(object.renamedServices[keys[i]]);
+                        }
                     }
                     return message;
                 };
@@ -25051,8 +26200,11 @@
                     var keys2;
                     if (message.renamedServices && (keys2 = Object.keys(message.renamedServices)).length) {
                         object.renamedServices = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedServices, keys2[j]);
                             object.renamedServices[keys2[j]] = message.renamedServices[keys2[j]];
+                        }
                     }
                     return object;
                 };
@@ -25109,7 +26261,7 @@
                     this.autoPopulatedFields = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -25195,9 +26347,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodSettings.decode = function decode(reader, length, error) {
+                MethodSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.MethodSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -25209,7 +26365,7 @@
                                 break;
                             }
                         case 2: {
-                                message.longRunning = $root.google.api.MethodSettings.LongRunning.decode(reader, reader.uint32());
+                                message.longRunning = $root.google.api.MethodSettings.LongRunning.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -25219,7 +26375,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -25250,14 +26406,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodSettings.verify = function verify(message) {
+                MethodSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.selector != null && message.hasOwnProperty("selector"))
                         if (!$util.isString(message.selector))
                             return "selector: string expected";
                     if (message.longRunning != null && message.hasOwnProperty("longRunning")) {
-                        var error = $root.google.api.MethodSettings.LongRunning.verify(message.longRunning);
+                        var error = $root.google.api.MethodSettings.LongRunning.verify(message.longRunning, long + 1);
                         if (error)
                             return "longRunning." + error;
                     }
@@ -25279,16 +26439,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.MethodSettings} MethodSettings
                  */
-                MethodSettings.fromObject = function fromObject(object) {
+                MethodSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.MethodSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.MethodSettings();
                     if (object.selector != null)
                         message.selector = String(object.selector);
                     if (object.longRunning != null) {
                         if (typeof object.longRunning !== "object")
                             throw TypeError(".google.api.MethodSettings.longRunning: object expected");
-                        message.longRunning = $root.google.api.MethodSettings.LongRunning.fromObject(object.longRunning);
+                        message.longRunning = $root.google.api.MethodSettings.LongRunning.fromObject(object.longRunning, long + 1);
                     }
                     if (object.autoPopulatedFields) {
                         if (!Array.isArray(object.autoPopulatedFields))
@@ -25380,7 +26544,7 @@
                     function LongRunning(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -25475,9 +26639,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    LongRunning.decode = function decode(reader, length, error) {
+                    LongRunning.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.MethodSettings.LongRunning();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -25485,7 +26653,7 @@
                                 break;
                             switch (tag >>> 3) {
                             case 1: {
-                                    message.initialPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.initialPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 2: {
@@ -25493,15 +26661,15 @@
                                     break;
                                 }
                             case 3: {
-                                    message.maxPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.maxPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 4: {
-                                    message.totalPollTimeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.totalPollTimeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -25532,11 +26700,15 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    LongRunning.verify = function verify(message) {
+                    LongRunning.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.initialPollDelay != null && message.hasOwnProperty("initialPollDelay")) {
-                            var error = $root.google.protobuf.Duration.verify(message.initialPollDelay);
+                            var error = $root.google.protobuf.Duration.verify(message.initialPollDelay, long + 1);
                             if (error)
                                 return "initialPollDelay." + error;
                         }
@@ -25544,12 +26716,12 @@
                             if (typeof message.pollDelayMultiplier !== "number")
                                 return "pollDelayMultiplier: number expected";
                         if (message.maxPollDelay != null && message.hasOwnProperty("maxPollDelay")) {
-                            var error = $root.google.protobuf.Duration.verify(message.maxPollDelay);
+                            var error = $root.google.protobuf.Duration.verify(message.maxPollDelay, long + 1);
                             if (error)
                                 return "maxPollDelay." + error;
                         }
                         if (message.totalPollTimeout != null && message.hasOwnProperty("totalPollTimeout")) {
-                            var error = $root.google.protobuf.Duration.verify(message.totalPollTimeout);
+                            var error = $root.google.protobuf.Duration.verify(message.totalPollTimeout, long + 1);
                             if (error)
                                 return "totalPollTimeout." + error;
                         }
@@ -25564,26 +26736,30 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.api.MethodSettings.LongRunning} LongRunning
                      */
-                    LongRunning.fromObject = function fromObject(object) {
+                    LongRunning.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.api.MethodSettings.LongRunning)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.api.MethodSettings.LongRunning();
                         if (object.initialPollDelay != null) {
                             if (typeof object.initialPollDelay !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.initialPollDelay: object expected");
-                            message.initialPollDelay = $root.google.protobuf.Duration.fromObject(object.initialPollDelay);
+                            message.initialPollDelay = $root.google.protobuf.Duration.fromObject(object.initialPollDelay, long + 1);
                         }
                         if (object.pollDelayMultiplier != null)
                             message.pollDelayMultiplier = Number(object.pollDelayMultiplier);
                         if (object.maxPollDelay != null) {
                             if (typeof object.maxPollDelay !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.maxPollDelay: object expected");
-                            message.maxPollDelay = $root.google.protobuf.Duration.fromObject(object.maxPollDelay);
+                            message.maxPollDelay = $root.google.protobuf.Duration.fromObject(object.maxPollDelay, long + 1);
                         }
                         if (object.totalPollTimeout != null) {
                             if (typeof object.totalPollTimeout !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.totalPollTimeout: object expected");
-                            message.totalPollTimeout = $root.google.protobuf.Duration.fromObject(object.totalPollTimeout);
+                            message.totalPollTimeout = $root.google.protobuf.Duration.fromObject(object.totalPollTimeout, long + 1);
                         }
                         return message;
                     };
@@ -25714,7 +26890,7 @@
                     this.methods = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -25790,9 +26966,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                SelectiveGapicGeneration.decode = function decode(reader, length, error) {
+                SelectiveGapicGeneration.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.SelectiveGapicGeneration();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -25810,7 +26990,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -25841,9 +27021,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                SelectiveGapicGeneration.verify = function verify(message) {
+                SelectiveGapicGeneration.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.methods != null && message.hasOwnProperty("methods")) {
                         if (!Array.isArray(message.methods))
                             return "methods: array expected";
@@ -25865,9 +27049,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.SelectiveGapicGeneration} SelectiveGapicGeneration
                  */
-                SelectiveGapicGeneration.fromObject = function fromObject(object) {
+                SelectiveGapicGeneration.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.SelectiveGapicGeneration)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.SelectiveGapicGeneration();
                     if (object.methods) {
                         if (!Array.isArray(object.methods))
@@ -26019,7 +27207,7 @@
                     this.style = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -26149,9 +27337,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ResourceDescriptor.decode = function decode(reader, length, error) {
+                ResourceDescriptor.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceDescriptor();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -26196,7 +27388,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -26227,9 +27419,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ResourceDescriptor.verify = function verify(message) {
+                ResourceDescriptor.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type != null && message.hasOwnProperty("type"))
                         if (!$util.isString(message.type))
                             return "type: string expected";
@@ -26281,9 +27477,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ResourceDescriptor} ResourceDescriptor
                  */
-                ResourceDescriptor.fromObject = function fromObject(object) {
+                ResourceDescriptor.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ResourceDescriptor)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ResourceDescriptor();
                     if (object.type != null)
                         message.type = String(object.type);
@@ -26471,7 +27671,7 @@
                 function ResourceReference(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -26546,9 +27746,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ResourceReference.decode = function decode(reader, length, error) {
+                ResourceReference.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceReference();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -26564,7 +27768,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -26595,9 +27799,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ResourceReference.verify = function verify(message) {
+                ResourceReference.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type != null && message.hasOwnProperty("type"))
                         if (!$util.isString(message.type))
                             return "type: string expected";
@@ -26615,9 +27823,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ResourceReference} ResourceReference
                  */
-                ResourceReference.fromObject = function fromObject(object) {
+                ResourceReference.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ResourceReference)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ResourceReference();
                     if (object.type != null)
                         message.type = String(object.type);
@@ -26712,7 +27924,7 @@
                     this.file = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -26778,9 +27990,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileDescriptorSet.decode = function decode(reader, length, error) {
+                FileDescriptorSet.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorSet();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -26790,11 +28006,11 @@
                         case 1: {
                                 if (!(message.file && message.file.length))
                                     message.file = [];
-                                message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32()));
+                                message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -26825,14 +28041,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileDescriptorSet.verify = function verify(message) {
+                FileDescriptorSet.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.file != null && message.hasOwnProperty("file")) {
                         if (!Array.isArray(message.file))
                             return "file: array expected";
                         for (var i = 0; i < message.file.length; ++i) {
-                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i]);
+                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i], long + 1);
                             if (error)
                                 return "file." + error;
                         }
@@ -26848,9 +28068,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet
                  */
-                FileDescriptorSet.fromObject = function fromObject(object) {
+                FileDescriptorSet.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileDescriptorSet)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileDescriptorSet();
                     if (object.file) {
                         if (!Array.isArray(object.file))
@@ -26859,7 +28083,7 @@
                         for (var i = 0; i < object.file.length; ++i) {
                             if (typeof object.file[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorSet.file: object expected");
-                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i]);
+                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i], long + 1);
                         }
                     }
                     return message;
@@ -26992,7 +28216,7 @@
                     this.extension = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -27195,9 +28419,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileDescriptorProto.decode = function decode(reader, length, error) {
+                FileDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -27249,33 +28477,33 @@
                         case 4: {
                                 if (!(message.messageType && message.messageType.length))
                                     message.messageType = [];
-                                message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
+                                message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
                                 if (!(message.enumType && message.enumType.length))
                                     message.enumType = [];
-                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
+                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 6: {
                                 if (!(message.service && message.service.length))
                                     message.service = [];
-                                message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32()));
+                                message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 7: {
                                 if (!(message.extension && message.extension.length))
                                     message.extension = [];
-                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 8: {
-                                message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 9: {
-                                message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32());
+                                message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 12: {
@@ -27287,7 +28515,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -27318,9 +28546,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileDescriptorProto.verify = function verify(message) {
+                FileDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -27359,7 +28591,7 @@
                         if (!Array.isArray(message.messageType))
                             return "messageType: array expected";
                         for (var i = 0; i < message.messageType.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i]);
+                            var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i], long + 1);
                             if (error)
                                 return "messageType." + error;
                         }
@@ -27368,7 +28600,7 @@
                         if (!Array.isArray(message.enumType))
                             return "enumType: array expected";
                         for (var i = 0; i < message.enumType.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i], long + 1);
                             if (error)
                                 return "enumType." + error;
                         }
@@ -27377,7 +28609,7 @@
                         if (!Array.isArray(message.service))
                             return "service: array expected";
                         for (var i = 0; i < message.service.length; ++i) {
-                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i]);
+                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i], long + 1);
                             if (error)
                                 return "service." + error;
                         }
@@ -27386,18 +28618,18 @@
                         if (!Array.isArray(message.extension))
                             return "extension: array expected";
                         for (var i = 0; i < message.extension.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i], long + 1);
                             if (error)
                                 return "extension." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.FileOptions.verify(message.options);
+                        var error = $root.google.protobuf.FileOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
                     if (message.sourceCodeInfo != null && message.hasOwnProperty("sourceCodeInfo")) {
-                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo);
+                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo, long + 1);
                         if (error)
                             return "sourceCodeInfo." + error;
                     }
@@ -27433,9 +28665,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto
                  */
-                FileDescriptorProto.fromObject = function fromObject(object) {
+                FileDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -27476,7 +28712,7 @@
                         for (var i = 0; i < object.messageType.length; ++i) {
                             if (typeof object.messageType[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.messageType: object expected");
-                            message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i]);
+                            message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i], long + 1);
                         }
                     }
                     if (object.enumType) {
@@ -27486,7 +28722,7 @@
                         for (var i = 0; i < object.enumType.length; ++i) {
                             if (typeof object.enumType[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.enumType: object expected");
-                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]);
+                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i], long + 1);
                         }
                     }
                     if (object.service) {
@@ -27496,7 +28732,7 @@
                         for (var i = 0; i < object.service.length; ++i) {
                             if (typeof object.service[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.service: object expected");
-                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i]);
+                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i], long + 1);
                         }
                     }
                     if (object.extension) {
@@ -27506,18 +28742,18 @@
                         for (var i = 0; i < object.extension.length; ++i) {
                             if (typeof object.extension[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.extension: object expected");
-                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
+                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.FileDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options, long + 1);
                     }
                     if (object.sourceCodeInfo != null) {
                         if (typeof object.sourceCodeInfo !== "object")
                             throw TypeError(".google.protobuf.FileDescriptorProto.sourceCodeInfo: object expected");
-                        message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo);
+                        message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo, long + 1);
                     }
                     if (object.syntax != null)
                         message.syntax = String(object.syntax);
@@ -27733,7 +28969,7 @@
                     this.reservedName = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -27906,9 +29142,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DescriptorProto.decode = function decode(reader, length, error) {
+                DescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -27922,47 +29162,47 @@
                         case 2: {
                                 if (!(message.field && message.field.length))
                                     message.field = [];
-                                message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 6: {
                                 if (!(message.extension && message.extension.length))
                                     message.extension = [];
-                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
                                 if (!(message.nestedType && message.nestedType.length))
                                     message.nestedType = [];
-                                message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
+                                message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 4: {
                                 if (!(message.enumType && message.enumType.length))
                                     message.enumType = [];
-                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
+                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
                                 if (!(message.extensionRange && message.extensionRange.length))
                                     message.extensionRange = [];
-                                message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32()));
+                                message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 8: {
                                 if (!(message.oneofDecl && message.oneofDecl.length))
                                     message.oneofDecl = [];
-                                message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32()));
+                                message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 7: {
-                                message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 9: {
                                 if (!(message.reservedRange && message.reservedRange.length))
                                     message.reservedRange = [];
-                                message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32()));
+                                message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 10: {
@@ -27976,7 +29216,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -28007,9 +29247,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DescriptorProto.verify = function verify(message) {
+                DescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -28017,7 +29261,7 @@
                         if (!Array.isArray(message.field))
                             return "field: array expected";
                         for (var i = 0; i < message.field.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i], long + 1);
                             if (error)
                                 return "field." + error;
                         }
@@ -28026,7 +29270,7 @@
                         if (!Array.isArray(message.extension))
                             return "extension: array expected";
                         for (var i = 0; i < message.extension.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i], long + 1);
                             if (error)
                                 return "extension." + error;
                         }
@@ -28035,7 +29279,7 @@
                         if (!Array.isArray(message.nestedType))
                             return "nestedType: array expected";
                         for (var i = 0; i < message.nestedType.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i]);
+                            var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i], long + 1);
                             if (error)
                                 return "nestedType." + error;
                         }
@@ -28044,7 +29288,7 @@
                         if (!Array.isArray(message.enumType))
                             return "enumType: array expected";
                         for (var i = 0; i < message.enumType.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i], long + 1);
                             if (error)
                                 return "enumType." + error;
                         }
@@ -28053,7 +29297,7 @@
                         if (!Array.isArray(message.extensionRange))
                             return "extensionRange: array expected";
                         for (var i = 0; i < message.extensionRange.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i]);
+                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i], long + 1);
                             if (error)
                                 return "extensionRange." + error;
                         }
@@ -28062,13 +29306,13 @@
                         if (!Array.isArray(message.oneofDecl))
                             return "oneofDecl: array expected";
                         for (var i = 0; i < message.oneofDecl.length; ++i) {
-                            var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i]);
+                            var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i], long + 1);
                             if (error)
                                 return "oneofDecl." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.MessageOptions.verify(message.options);
+                        var error = $root.google.protobuf.MessageOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -28076,7 +29320,7 @@
                         if (!Array.isArray(message.reservedRange))
                             return "reservedRange: array expected";
                         for (var i = 0; i < message.reservedRange.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i]);
+                            var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i], long + 1);
                             if (error)
                                 return "reservedRange." + error;
                         }
@@ -28108,9 +29352,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.DescriptorProto} DescriptorProto
                  */
-                DescriptorProto.fromObject = function fromObject(object) {
+                DescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.DescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.DescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -28121,7 +29369,7 @@
                         for (var i = 0; i < object.field.length; ++i) {
                             if (typeof object.field[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.field: object expected");
-                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i]);
+                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i], long + 1);
                         }
                     }
                     if (object.extension) {
@@ -28131,7 +29379,7 @@
                         for (var i = 0; i < object.extension.length; ++i) {
                             if (typeof object.extension[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.extension: object expected");
-                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
+                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i], long + 1);
                         }
                     }
                     if (object.nestedType) {
@@ -28141,7 +29389,7 @@
                         for (var i = 0; i < object.nestedType.length; ++i) {
                             if (typeof object.nestedType[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.nestedType: object expected");
-                            message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i]);
+                            message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i], long + 1);
                         }
                     }
                     if (object.enumType) {
@@ -28151,7 +29399,7 @@
                         for (var i = 0; i < object.enumType.length; ++i) {
                             if (typeof object.enumType[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.enumType: object expected");
-                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]);
+                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i], long + 1);
                         }
                     }
                     if (object.extensionRange) {
@@ -28161,7 +29409,7 @@
                         for (var i = 0; i < object.extensionRange.length; ++i) {
                             if (typeof object.extensionRange[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.extensionRange: object expected");
-                            message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i]);
+                            message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i], long + 1);
                         }
                     }
                     if (object.oneofDecl) {
@@ -28171,13 +29419,13 @@
                         for (var i = 0; i < object.oneofDecl.length; ++i) {
                             if (typeof object.oneofDecl[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.oneofDecl: object expected");
-                            message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i]);
+                            message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.DescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options, long + 1);
                     }
                     if (object.reservedRange) {
                         if (!Array.isArray(object.reservedRange))
@@ -28186,7 +29434,7 @@
                         for (var i = 0; i < object.reservedRange.length; ++i) {
                             if (typeof object.reservedRange[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.reservedRange: object expected");
-                            message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i]);
+                            message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i], long + 1);
                         }
                     }
                     if (object.reservedName) {
@@ -28344,7 +29592,7 @@
                     function ExtensionRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -28429,9 +29677,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ExtensionRange.decode = function decode(reader, length, error) {
+                    ExtensionRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -28447,11 +29699,11 @@
                                     break;
                                 }
                             case 3: {
-                                    message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32());
+                                    message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -28482,9 +29734,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ExtensionRange.verify = function verify(message) {
+                    ExtensionRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -28492,7 +29748,7 @@
                             if (!$util.isInteger(message.end))
                                 return "end: integer expected";
                         if (message.options != null && message.hasOwnProperty("options")) {
-                            var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options);
+                            var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options, long + 1);
                             if (error)
                                 return "options." + error;
                         }
@@ -28507,9 +29763,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange
                      */
-                    ExtensionRange.fromObject = function fromObject(object) {
+                    ExtensionRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.DescriptorProto.ExtensionRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -28518,7 +29778,7 @@
                         if (object.options != null) {
                             if (typeof object.options !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.ExtensionRange.options: object expected");
-                            message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options);
+                            message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options, long + 1);
                         }
                         return message;
                     };
@@ -28600,7 +29860,7 @@
                     function ReservedRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -28675,9 +29935,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ReservedRange.decode = function decode(reader, length, error) {
+                    ReservedRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ReservedRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -28693,7 +29957,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -28724,9 +29988,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ReservedRange.verify = function verify(message) {
+                    ReservedRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -28744,9 +30012,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange
                      */
-                    ReservedRange.fromObject = function fromObject(object) {
+                    ReservedRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.DescriptorProto.ReservedRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.DescriptorProto.ReservedRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -28836,7 +30108,7 @@
                     this.declaration = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -28933,9 +30205,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ExtensionRangeOptions.decode = function decode(reader, length, error) {
+                ExtensionRangeOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -28945,17 +30221,17 @@
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
                                 if (!(message.declaration && message.declaration.length))
                                     message.declaration = [];
-                                message.declaration.push($root.google.protobuf.ExtensionRangeOptions.Declaration.decode(reader, reader.uint32()));
+                                message.declaration.push($root.google.protobuf.ExtensionRangeOptions.Declaration.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 50: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -28963,7 +30239,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -28994,14 +30270,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ExtensionRangeOptions.verify = function verify(message) {
+                ExtensionRangeOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) {
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -29010,13 +30290,13 @@
                         if (!Array.isArray(message.declaration))
                             return "declaration: array expected";
                         for (var i = 0; i < message.declaration.length; ++i) {
-                            var error = $root.google.protobuf.ExtensionRangeOptions.Declaration.verify(message.declaration[i]);
+                            var error = $root.google.protobuf.ExtensionRangeOptions.Declaration.verify(message.declaration[i], long + 1);
                             if (error)
                                 return "declaration." + error;
                         }
                     }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -29039,9 +30319,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions
                  */
-                ExtensionRangeOptions.fromObject = function fromObject(object) {
+                ExtensionRangeOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ExtensionRangeOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ExtensionRangeOptions();
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -29050,7 +30334,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.ExtensionRangeOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object.declaration) {
@@ -29060,13 +30344,13 @@
                         for (var i = 0; i < object.declaration.length; ++i) {
                             if (typeof object.declaration[i] !== "object")
                                 throw TypeError(".google.protobuf.ExtensionRangeOptions.declaration: object expected");
-                            message.declaration[i] = $root.google.protobuf.ExtensionRangeOptions.Declaration.fromObject(object.declaration[i]);
+                            message.declaration[i] = $root.google.protobuf.ExtensionRangeOptions.Declaration.fromObject(object.declaration[i], long + 1);
                         }
                     }
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.ExtensionRangeOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     switch (object.verification) {
                     case "DECLARATION":
@@ -29175,7 +30459,7 @@
                     function Declaration(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -29280,9 +30564,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Declaration.decode = function decode(reader, length, error) {
+                    Declaration.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions.Declaration();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -29310,7 +30598,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -29341,9 +30629,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Declaration.verify = function verify(message) {
+                    Declaration.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.number != null && message.hasOwnProperty("number"))
                             if (!$util.isInteger(message.number))
                                 return "number: integer expected";
@@ -29370,9 +30662,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.ExtensionRangeOptions.Declaration} Declaration
                      */
-                    Declaration.fromObject = function fromObject(object) {
+                    Declaration.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.ExtensionRangeOptions.Declaration)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.ExtensionRangeOptions.Declaration();
                         if (object.number != null)
                             message.number = object.number | 0;
@@ -29496,7 +30792,7 @@
                 function FieldDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -29661,9 +30957,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldDescriptorProto.decode = function decode(reader, length, error) {
+                FieldDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -29707,7 +31007,7 @@
                                 break;
                             }
                         case 8: {
-                                message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 17: {
@@ -29715,7 +31015,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -29746,9 +31046,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldDescriptorProto.verify = function verify(message) {
+                FieldDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -29804,7 +31108,7 @@
                         if (!$util.isString(message.jsonName))
                             return "jsonName: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.FieldOptions.verify(message.options);
+                        var error = $root.google.protobuf.FieldOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -29822,9 +31126,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto
                  */
-                FieldDescriptorProto.fromObject = function fromObject(object) {
+                FieldDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -29943,7 +31251,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.FieldDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options, long + 1);
                     }
                     if (object.proto3Optional != null)
                         message.proto3Optional = Boolean(object.proto3Optional);
@@ -30113,7 +31421,7 @@
                 function OneofDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -30188,9 +31496,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OneofDescriptorProto.decode = function decode(reader, length, error) {
+                OneofDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -30202,11 +31514,11 @@
                                 break;
                             }
                         case 2: {
-                                message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -30237,14 +31549,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OneofDescriptorProto.verify = function verify(message) {
+                OneofDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.OneofOptions.verify(message.options);
+                        var error = $root.google.protobuf.OneofOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -30259,16 +31575,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto
                  */
-                OneofDescriptorProto.fromObject = function fromObject(object) {
+                OneofDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.OneofDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.OneofDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.OneofDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.OneofOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.OneofOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -30354,7 +31674,7 @@
                     this.reservedName = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -30472,9 +31792,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumDescriptorProto.decode = function decode(reader, length, error) {
+                EnumDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -30488,17 +31812,17 @@
                         case 2: {
                                 if (!(message.value && message.value.length))
                                     message.value = [];
-                                message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32()));
+                                message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 4: {
                                 if (!(message.reservedRange && message.reservedRange.length))
                                     message.reservedRange = [];
-                                message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32()));
+                                message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
@@ -30512,7 +31836,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -30543,9 +31867,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumDescriptorProto.verify = function verify(message) {
+                EnumDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -30553,13 +31881,13 @@
                         if (!Array.isArray(message.value))
                             return "value: array expected";
                         for (var i = 0; i < message.value.length; ++i) {
-                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i]);
+                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i], long + 1);
                             if (error)
                                 return "value." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.EnumOptions.verify(message.options);
+                        var error = $root.google.protobuf.EnumOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -30567,7 +31895,7 @@
                         if (!Array.isArray(message.reservedRange))
                             return "reservedRange: array expected";
                         for (var i = 0; i < message.reservedRange.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i], long + 1);
                             if (error)
                                 return "reservedRange." + error;
                         }
@@ -30599,9 +31927,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto
                  */
-                EnumDescriptorProto.fromObject = function fromObject(object) {
+                EnumDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -30612,13 +31944,13 @@
                         for (var i = 0; i < object.value.length; ++i) {
                             if (typeof object.value[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumDescriptorProto.value: object expected");
-                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i]);
+                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.EnumDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options, long + 1);
                     }
                     if (object.reservedRange) {
                         if (!Array.isArray(object.reservedRange))
@@ -30627,7 +31959,7 @@
                         for (var i = 0; i < object.reservedRange.length; ++i) {
                             if (typeof object.reservedRange[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumDescriptorProto.reservedRange: object expected");
-                            message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i]);
+                            message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i], long + 1);
                         }
                     }
                     if (object.reservedName) {
@@ -30754,7 +32086,7 @@
                     function EnumReservedRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -30829,9 +32161,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    EnumReservedRange.decode = function decode(reader, length, error) {
+                    EnumReservedRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -30847,7 +32183,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -30878,9 +32214,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    EnumReservedRange.verify = function verify(message) {
+                    EnumReservedRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -30898,9 +32238,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange
                      */
-                    EnumReservedRange.fromObject = function fromObject(object) {
+                    EnumReservedRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.EnumDescriptorProto.EnumReservedRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -30987,7 +32331,7 @@
                 function EnumValueDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -31072,9 +32416,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumValueDescriptorProto.decode = function decode(reader, length, error) {
+                EnumValueDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -31090,11 +32438,11 @@
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -31125,9 +32473,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumValueDescriptorProto.verify = function verify(message) {
+                EnumValueDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -31135,7 +32487,7 @@
                         if (!$util.isInteger(message.number))
                             return "number: integer expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options);
+                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -31150,9 +32502,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto
                  */
-                EnumValueDescriptorProto.fromObject = function fromObject(object) {
+                EnumValueDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumValueDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumValueDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -31161,7 +32517,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.EnumValueDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -31245,7 +32601,7 @@
                     this.method = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -31331,9 +32687,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ServiceDescriptorProto.decode = function decode(reader, length, error) {
+                ServiceDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -31347,15 +32707,15 @@
                         case 2: {
                                 if (!(message.method && message.method.length))
                                     message.method = [];
-                                message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32()));
+                                message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -31386,9 +32746,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ServiceDescriptorProto.verify = function verify(message) {
+                ServiceDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -31396,13 +32760,13 @@
                         if (!Array.isArray(message.method))
                             return "method: array expected";
                         for (var i = 0; i < message.method.length; ++i) {
-                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i]);
+                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i], long + 1);
                             if (error)
                                 return "method." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.ServiceOptions.verify(message.options);
+                        var error = $root.google.protobuf.ServiceOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -31417,9 +32781,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto
                  */
-                ServiceDescriptorProto.fromObject = function fromObject(object) {
+                ServiceDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ServiceDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ServiceDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -31430,13 +32798,13 @@
                         for (var i = 0; i < object.method.length; ++i) {
                             if (typeof object.method[i] !== "object")
                                 throw TypeError(".google.protobuf.ServiceDescriptorProto.method: object expected");
-                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i]);
+                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.ServiceDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -31526,7 +32894,7 @@
                 function MethodDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -31641,9 +33009,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodDescriptorProto.decode = function decode(reader, length, error) {
+                MethodDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -31663,7 +33035,7 @@
                                 break;
                             }
                         case 4: {
-                                message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 5: {
@@ -31675,7 +33047,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -31706,9 +33078,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodDescriptorProto.verify = function verify(message) {
+                MethodDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -31719,7 +33095,7 @@
                         if (!$util.isString(message.outputType))
                             return "outputType: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.MethodOptions.verify(message.options);
+                        var error = $root.google.protobuf.MethodOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -31740,9 +33116,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto
                  */
-                MethodDescriptorProto.fromObject = function fromObject(object) {
+                MethodDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MethodDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MethodDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -31753,7 +33133,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.MethodDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options, long + 1);
                     }
                     if (object.clientStreaming != null)
                         message.clientStreaming = Boolean(object.clientStreaming);
@@ -31870,7 +33250,7 @@
                     this[".google.api.resourceDefinition"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -32147,9 +33527,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileOptions.decode = function decode(reader, length, error) {
+                FileOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -32233,23 +33617,23 @@
                                 break;
                             }
                         case 50: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1053: {
                                 if (!(message[".google.api.resourceDefinition"] && message[".google.api.resourceDefinition"].length))
                                     message[".google.api.resourceDefinition"] = [];
-                                message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32()));
+                                message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -32280,9 +33664,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileOptions.verify = function verify(message) {
+                FileOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.javaPackage != null && message.hasOwnProperty("javaPackage"))
                         if (!$util.isString(message.javaPackage))
                             return "javaPackage: string expected";
@@ -32347,7 +33735,7 @@
                         if (!$util.isString(message.rubyPackage))
                             return "rubyPackage: string expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -32355,7 +33743,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -32364,7 +33752,7 @@
                         if (!Array.isArray(message[".google.api.resourceDefinition"]))
                             return ".google.api.resourceDefinition: array expected";
                         for (var i = 0; i < message[".google.api.resourceDefinition"].length; ++i) {
-                            var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i]);
+                            var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i], long + 1);
                             if (error)
                                 return ".google.api.resourceDefinition." + error;
                         }
@@ -32380,9 +33768,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileOptions} FileOptions
                  */
-                FileOptions.fromObject = function fromObject(object) {
+                FileOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileOptions();
                     if (object.javaPackage != null)
                         message.javaPackage = String(object.javaPackage);
@@ -32443,7 +33835,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.FileOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -32452,7 +33844,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.FileOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.resourceDefinition"]) {
@@ -32462,7 +33854,7 @@
                         for (var i = 0; i < object[".google.api.resourceDefinition"].length; ++i) {
                             if (typeof object[".google.api.resourceDefinition"][i] !== "object")
                                 throw TypeError(".google.protobuf.FileOptions..google.api.resourceDefinition: object expected");
-                            message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i]);
+                            message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i], long + 1);
                         }
                     }
                     return message;
@@ -32633,7 +34025,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -32769,9 +34161,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MessageOptions.decode = function decode(reader, length, error) {
+                MessageOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MessageOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -32799,21 +34195,21 @@
                                 break;
                             }
                         case 12: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1053: {
-                                message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32());
+                                message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -32844,9 +34240,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MessageOptions.verify = function verify(message) {
+                MessageOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.messageSetWireFormat != null && message.hasOwnProperty("messageSetWireFormat"))
                         if (typeof message.messageSetWireFormat !== "boolean")
                             return "messageSetWireFormat: boolean expected";
@@ -32863,7 +34263,7 @@
                         if (typeof message.deprecatedLegacyJsonFieldConflicts !== "boolean")
                             return "deprecatedLegacyJsonFieldConflicts: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -32871,13 +34271,13 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
                     }
                     if (message[".google.api.resource"] != null && message.hasOwnProperty(".google.api.resource")) {
-                        var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"]);
+                        var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"], long + 1);
                         if (error)
                             return ".google.api.resource." + error;
                     }
@@ -32892,9 +34292,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MessageOptions} MessageOptions
                  */
-                MessageOptions.fromObject = function fromObject(object) {
+                MessageOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MessageOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MessageOptions();
                     if (object.messageSetWireFormat != null)
                         message.messageSetWireFormat = Boolean(object.messageSetWireFormat);
@@ -32909,7 +34313,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.MessageOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -32918,13 +34322,13 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.MessageOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.resource"] != null) {
                         if (typeof object[".google.api.resource"] !== "object")
                             throw TypeError(".google.protobuf.MessageOptions..google.api.resource: object expected");
-                        message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"]);
+                        message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"], long + 1);
                     }
                     return message;
                 };
@@ -33043,7 +34447,7 @@
                     this[".google.api.fieldBehavior"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -33262,9 +34666,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldOptions.decode = function decode(reader, length, error) {
+                FieldOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -33321,21 +34729,21 @@
                         case 20: {
                                 if (!(message.editionDefaults && message.editionDefaults.length))
                                     message.editionDefaults = [];
-                                message.editionDefaults.push($root.google.protobuf.FieldOptions.EditionDefault.decode(reader, reader.uint32()));
+                                message.editionDefaults.push($root.google.protobuf.FieldOptions.EditionDefault.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 21: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 22: {
-                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32());
+                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1052: {
@@ -33350,11 +34758,11 @@
                                 break;
                             }
                         case 1055: {
-                                message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32());
+                                message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -33385,9 +34793,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldOptions.verify = function verify(message) {
+                FieldOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.ctype != null && message.hasOwnProperty("ctype"))
                         switch (message.ctype) {
                         default:
@@ -33457,18 +34869,18 @@
                         if (!Array.isArray(message.editionDefaults))
                             return "editionDefaults: array expected";
                         for (var i = 0; i < message.editionDefaults.length; ++i) {
-                            var error = $root.google.protobuf.FieldOptions.EditionDefault.verify(message.editionDefaults[i]);
+                            var error = $root.google.protobuf.FieldOptions.EditionDefault.verify(message.editionDefaults[i], long + 1);
                             if (error)
                                 return "editionDefaults." + error;
                         }
                     }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
                     if (message.featureSupport != null && message.hasOwnProperty("featureSupport")) {
-                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport);
+                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport, long + 1);
                         if (error)
                             return "featureSupport." + error;
                     }
@@ -33476,7 +34888,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -33501,7 +34913,7 @@
                             }
                     }
                     if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) {
-                        var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"]);
+                        var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"], long + 1);
                         if (error)
                             return ".google.api.resourceReference." + error;
                     }
@@ -33516,9 +34928,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldOptions} FieldOptions
                  */
-                FieldOptions.fromObject = function fromObject(object) {
+                FieldOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldOptions();
                     switch (object.ctype) {
                     default:
@@ -33652,18 +35068,18 @@
                         for (var i = 0; i < object.editionDefaults.length; ++i) {
                             if (typeof object.editionDefaults[i] !== "object")
                                 throw TypeError(".google.protobuf.FieldOptions.editionDefaults: object expected");
-                            message.editionDefaults[i] = $root.google.protobuf.FieldOptions.EditionDefault.fromObject(object.editionDefaults[i]);
+                            message.editionDefaults[i] = $root.google.protobuf.FieldOptions.EditionDefault.fromObject(object.editionDefaults[i], long + 1);
                         }
                     }
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.FieldOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.featureSupport != null) {
                         if (typeof object.featureSupport !== "object")
                             throw TypeError(".google.protobuf.FieldOptions.featureSupport: object expected");
-                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport);
+                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -33672,7 +35088,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.FieldOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.fieldBehavior"]) {
@@ -33727,7 +35143,7 @@
                     if (object[".google.api.resourceReference"] != null) {
                         if (typeof object[".google.api.resourceReference"] !== "object")
                             throw TypeError(".google.protobuf.FieldOptions..google.api.resourceReference: object expected");
-                        message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"]);
+                        message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"], long + 1);
                     }
                     return message;
                 };
@@ -33937,7 +35353,7 @@
                     function EditionDefault(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -34012,9 +35428,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    EditionDefault.decode = function decode(reader, length, error) {
+                    EditionDefault.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions.EditionDefault();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -34030,7 +35450,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -34061,9 +35481,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    EditionDefault.verify = function verify(message) {
+                    EditionDefault.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.edition != null && message.hasOwnProperty("edition"))
                             switch (message.edition) {
                             default:
@@ -34096,9 +35520,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FieldOptions.EditionDefault} EditionDefault
                      */
-                    EditionDefault.fromObject = function fromObject(object) {
+                    EditionDefault.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FieldOptions.EditionDefault)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FieldOptions.EditionDefault();
                         switch (object.edition) {
                         default:
@@ -34237,7 +35665,7 @@
                     function FeatureSupport(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -34332,9 +35760,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    FeatureSupport.decode = function decode(reader, length, error) {
+                    FeatureSupport.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions.FeatureSupport();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -34358,7 +35790,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -34389,9 +35821,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    FeatureSupport.verify = function verify(message) {
+                    FeatureSupport.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.editionIntroduced != null && message.hasOwnProperty("editionIntroduced"))
                             switch (message.editionIntroduced) {
                             default:
@@ -34460,9 +35896,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FieldOptions.FeatureSupport} FeatureSupport
                      */
-                    FeatureSupport.fromObject = function fromObject(object) {
+                    FeatureSupport.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FieldOptions.FeatureSupport)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FieldOptions.FeatureSupport();
                         switch (object.editionIntroduced) {
                         default:
@@ -34721,7 +36161,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -34797,9 +36237,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OneofOptions.decode = function decode(reader, length, error) {
+                OneofOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -34807,17 +36251,17 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -34848,11 +36292,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OneofOptions.verify = function verify(message) {
+                OneofOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -34860,7 +36308,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -34876,14 +36324,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.OneofOptions} OneofOptions
                  */
-                OneofOptions.fromObject = function fromObject(object) {
+                OneofOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.OneofOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.OneofOptions();
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.OneofOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -34892,7 +36344,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.OneofOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -34979,7 +36431,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -35085,9 +36537,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumOptions.decode = function decode(reader, length, error) {
+                EnumOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -35107,17 +36563,17 @@
                                 break;
                             }
                         case 7: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -35148,9 +36604,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumOptions.verify = function verify(message) {
+                EnumOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.allowAlias != null && message.hasOwnProperty("allowAlias"))
                         if (typeof message.allowAlias !== "boolean")
                             return "allowAlias: boolean expected";
@@ -35161,7 +36621,7 @@
                         if (typeof message.deprecatedLegacyJsonFieldConflicts !== "boolean")
                             return "deprecatedLegacyJsonFieldConflicts: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -35169,7 +36629,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -35185,9 +36645,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumOptions} EnumOptions
                  */
-                EnumOptions.fromObject = function fromObject(object) {
+                EnumOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumOptions();
                     if (object.allowAlias != null)
                         message.allowAlias = Boolean(object.allowAlias);
@@ -35198,7 +36662,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.EnumOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -35207,7 +36671,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -35304,7 +36768,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -35410,9 +36874,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumValueOptions.decode = function decode(reader, length, error) {
+                EnumValueOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -35424,7 +36892,7 @@
                                 break;
                             }
                         case 2: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -35432,17 +36900,17 @@
                                 break;
                             }
                         case 4: {
-                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32());
+                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -35473,14 +36941,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumValueOptions.verify = function verify(message) {
+                EnumValueOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                         if (typeof message.deprecated !== "boolean")
                             return "deprecated: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -35488,7 +36960,7 @@
                         if (typeof message.debugRedact !== "boolean")
                             return "debugRedact: boolean expected";
                     if (message.featureSupport != null && message.hasOwnProperty("featureSupport")) {
-                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport);
+                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport, long + 1);
                         if (error)
                             return "featureSupport." + error;
                     }
@@ -35496,7 +36968,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -35512,23 +36984,27 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumValueOptions} EnumValueOptions
                  */
-                EnumValueOptions.fromObject = function fromObject(object) {
+                EnumValueOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumValueOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumValueOptions();
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.EnumValueOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.debugRedact != null)
                         message.debugRedact = Boolean(object.debugRedact);
                     if (object.featureSupport != null) {
                         if (typeof object.featureSupport !== "object")
                             throw TypeError(".google.protobuf.EnumValueOptions.featureSupport: object expected");
-                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport);
+                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -35537,7 +37013,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumValueOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -35635,7 +37111,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -35751,9 +37227,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ServiceOptions.decode = function decode(reader, length, error) {
+                ServiceOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -35761,7 +37241,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 34: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 33: {
@@ -35771,7 +37251,7 @@
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1049: {
@@ -35787,7 +37267,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -35818,11 +37298,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ServiceOptions.verify = function verify(message) {
+                ServiceOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -35833,7 +37317,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -35858,14 +37342,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ServiceOptions} ServiceOptions
                  */
-                ServiceOptions.fromObject = function fromObject(object) {
+                ServiceOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ServiceOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ServiceOptions();
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.ServiceOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
@@ -35876,7 +37364,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.ServiceOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.defaultHost"] != null)
@@ -35985,7 +37473,7 @@
                     this[".google.api.methodSignature"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -36112,9 +37600,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodOptions.decode = function decode(reader, length, error) {
+                MethodOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36130,17 +37622,17 @@
                                 break;
                             }
                         case 35: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 72295728: {
-                                message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32());
+                                message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 1051: {
@@ -36150,11 +37642,11 @@
                                 break;
                             }
                         case 1049: {
-                                message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32());
+                                message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -36185,9 +37677,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodOptions.verify = function verify(message) {
+                MethodOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                         if (typeof message.deprecated !== "boolean")
                             return "deprecated: boolean expected";
@@ -36201,7 +37697,7 @@
                             break;
                         }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -36209,13 +37705,13 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
                     }
                     if (message[".google.api.http"] != null && message.hasOwnProperty(".google.api.http")) {
-                        var error = $root.google.api.HttpRule.verify(message[".google.api.http"]);
+                        var error = $root.google.api.HttpRule.verify(message[".google.api.http"], long + 1);
                         if (error)
                             return ".google.api.http." + error;
                     }
@@ -36227,7 +37723,7 @@
                                 return ".google.api.methodSignature: string[] expected";
                     }
                     if (message[".google.longrunning.operationInfo"] != null && message.hasOwnProperty(".google.longrunning.operationInfo")) {
-                        var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"]);
+                        var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"], long + 1);
                         if (error)
                             return ".google.longrunning.operationInfo." + error;
                     }
@@ -36242,9 +37738,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MethodOptions} MethodOptions
                  */
-                MethodOptions.fromObject = function fromObject(object) {
+                MethodOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MethodOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MethodOptions();
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
@@ -36271,7 +37771,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.MethodOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -36280,13 +37780,13 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.MethodOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.http"] != null) {
                         if (typeof object[".google.api.http"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.api.http: object expected");
-                        message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"]);
+                        message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"], long + 1);
                     }
                     if (object[".google.api.methodSignature"]) {
                         if (!Array.isArray(object[".google.api.methodSignature"]))
@@ -36298,7 +37798,7 @@
                     if (object[".google.longrunning.operationInfo"] != null) {
                         if (typeof object[".google.longrunning.operationInfo"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.longrunning.operationInfo: object expected");
-                        message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"]);
+                        message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"], long + 1);
                     }
                     return message;
                 };
@@ -36422,7 +37922,7 @@
                     this.name = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -36548,9 +38048,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                UninterpretedOption.decode = function decode(reader, length, error) {
+                UninterpretedOption.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36560,7 +38064,7 @@
                         case 2: {
                                 if (!(message.name && message.name.length))
                                     message.name = [];
-                                message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32()));
+                                message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
@@ -36588,7 +38092,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -36619,14 +38123,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                UninterpretedOption.verify = function verify(message) {
+                UninterpretedOption.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name")) {
                         if (!Array.isArray(message.name))
                             return "name: array expected";
                         for (var i = 0; i < message.name.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i], long + 1);
                             if (error)
                                 return "name." + error;
                         }
@@ -36660,9 +38168,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.UninterpretedOption} UninterpretedOption
                  */
-                UninterpretedOption.fromObject = function fromObject(object) {
+                UninterpretedOption.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.UninterpretedOption)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.UninterpretedOption();
                     if (object.name) {
                         if (!Array.isArray(object.name))
@@ -36671,7 +38183,7 @@
                         for (var i = 0; i < object.name.length; ++i) {
                             if (typeof object.name[i] !== "object")
                                 throw TypeError(".google.protobuf.UninterpretedOption.name: object expected");
-                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i]);
+                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i], long + 1);
                         }
                     }
                     if (object.identifierValue != null)
@@ -36816,7 +38328,7 @@
                     function NamePart(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -36889,9 +38401,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    NamePart.decode = function decode(reader, length, error) {
+                    NamePart.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption.NamePart();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -36907,7 +38423,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -36942,9 +38458,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    NamePart.verify = function verify(message) {
+                    NamePart.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (!$util.isString(message.namePart))
                             return "namePart: string expected";
                         if (typeof message.isExtension !== "boolean")
@@ -36960,9 +38480,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart
                      */
-                    NamePart.fromObject = function fromObject(object) {
+                    NamePart.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.UninterpretedOption.NamePart)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.UninterpretedOption.NamePart();
                         if (object.namePart != null)
                             message.namePart = String(object.namePart);
@@ -37054,7 +38578,7 @@
                 function FeatureSet(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -37189,9 +38713,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FeatureSet.decode = function decode(reader, length, error) {
+                FeatureSet.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSet();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -37231,7 +38759,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -37262,9 +38790,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FeatureSet.verify = function verify(message) {
+                FeatureSet.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.fieldPresence != null && message.hasOwnProperty("fieldPresence"))
                         switch (message.fieldPresence) {
                         default:
@@ -37351,9 +38883,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FeatureSet} FeatureSet
                  */
-                FeatureSet.fromObject = function fromObject(object) {
+                FeatureSet.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FeatureSet)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FeatureSet();
                     switch (object.fieldPresence) {
                     default:
@@ -37731,7 +39267,7 @@
                     function VisibilityFeature(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -37786,9 +39322,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    VisibilityFeature.decode = function decode(reader, length, error) {
+                    VisibilityFeature.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSet.VisibilityFeature();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -37796,7 +39336,7 @@
                                 break;
                             switch (tag >>> 3) {
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -37827,9 +39367,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    VisibilityFeature.verify = function verify(message) {
+                    VisibilityFeature.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         return null;
                     };
     
@@ -37841,9 +39385,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FeatureSet.VisibilityFeature} VisibilityFeature
                      */
-                    VisibilityFeature.fromObject = function fromObject(object) {
+                    VisibilityFeature.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FeatureSet.VisibilityFeature)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         return new $root.google.protobuf.FeatureSet.VisibilityFeature();
                     };
     
@@ -37935,7 +39483,7 @@
                     this.defaults = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38021,9 +39569,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FeatureSetDefaults.decode = function decode(reader, length, error) {
+                FeatureSetDefaults.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSetDefaults();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38033,7 +39585,7 @@
                         case 1: {
                                 if (!(message.defaults && message.defaults.length))
                                     message.defaults = [];
-                                message.defaults.push($root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.decode(reader, reader.uint32()));
+                                message.defaults.push($root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 4: {
@@ -38045,7 +39597,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38076,14 +39628,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FeatureSetDefaults.verify = function verify(message) {
+                FeatureSetDefaults.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.defaults != null && message.hasOwnProperty("defaults")) {
                         if (!Array.isArray(message.defaults))
                             return "defaults: array expected";
                         for (var i = 0; i < message.defaults.length; ++i) {
-                            var error = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify(message.defaults[i]);
+                            var error = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify(message.defaults[i], long + 1);
                             if (error)
                                 return "defaults." + error;
                         }
@@ -38135,9 +39691,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FeatureSetDefaults} FeatureSetDefaults
                  */
-                FeatureSetDefaults.fromObject = function fromObject(object) {
+                FeatureSetDefaults.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FeatureSetDefaults)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FeatureSetDefaults();
                     if (object.defaults) {
                         if (!Array.isArray(object.defaults))
@@ -38146,7 +39706,7 @@
                         for (var i = 0; i < object.defaults.length; ++i) {
                             if (typeof object.defaults[i] !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.defaults: object expected");
-                            message.defaults[i] = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fromObject(object.defaults[i]);
+                            message.defaults[i] = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fromObject(object.defaults[i], long + 1);
                         }
                     }
                     switch (object.minimumEdition) {
@@ -38343,7 +39903,7 @@
                     function FeatureSetEditionDefault(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -38428,9 +39988,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    FeatureSetEditionDefault.decode = function decode(reader, length, error) {
+                    FeatureSetEditionDefault.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -38442,15 +40006,15 @@
                                     break;
                                 }
                             case 4: {
-                                    message.overridableFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                    message.overridableFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 5: {
-                                    message.fixedFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                    message.fixedFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -38481,9 +40045,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    FeatureSetEditionDefault.verify = function verify(message) {
+                    FeatureSetEditionDefault.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.edition != null && message.hasOwnProperty("edition"))
                             switch (message.edition) {
                             default:
@@ -38503,12 +40071,12 @@
                                 break;
                             }
                         if (message.overridableFeatures != null && message.hasOwnProperty("overridableFeatures")) {
-                            var error = $root.google.protobuf.FeatureSet.verify(message.overridableFeatures);
+                            var error = $root.google.protobuf.FeatureSet.verify(message.overridableFeatures, long + 1);
                             if (error)
                                 return "overridableFeatures." + error;
                         }
                         if (message.fixedFeatures != null && message.hasOwnProperty("fixedFeatures")) {
-                            var error = $root.google.protobuf.FeatureSet.verify(message.fixedFeatures);
+                            var error = $root.google.protobuf.FeatureSet.verify(message.fixedFeatures, long + 1);
                             if (error)
                                 return "fixedFeatures." + error;
                         }
@@ -38523,9 +40091,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault} FeatureSetEditionDefault
                      */
-                    FeatureSetEditionDefault.fromObject = function fromObject(object) {
+                    FeatureSetEditionDefault.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault();
                         switch (object.edition) {
                         default:
@@ -38586,12 +40158,12 @@
                         if (object.overridableFeatures != null) {
                             if (typeof object.overridableFeatures !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridableFeatures: object expected");
-                            message.overridableFeatures = $root.google.protobuf.FeatureSet.fromObject(object.overridableFeatures);
+                            message.overridableFeatures = $root.google.protobuf.FeatureSet.fromObject(object.overridableFeatures, long + 1);
                         }
                         if (object.fixedFeatures != null) {
                             if (typeof object.fixedFeatures !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixedFeatures: object expected");
-                            message.fixedFeatures = $root.google.protobuf.FeatureSet.fromObject(object.fixedFeatures);
+                            message.fixedFeatures = $root.google.protobuf.FeatureSet.fromObject(object.fixedFeatures, long + 1);
                         }
                         return message;
                     };
@@ -38676,7 +40248,7 @@
                     this.location = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38742,9 +40314,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                SourceCodeInfo.decode = function decode(reader, length, error) {
+                SourceCodeInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38754,11 +40330,11 @@
                         case 1: {
                                 if (!(message.location && message.location.length))
                                     message.location = [];
-                                message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32()));
+                                message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38789,14 +40365,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                SourceCodeInfo.verify = function verify(message) {
+                SourceCodeInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.location != null && message.hasOwnProperty("location")) {
                         if (!Array.isArray(message.location))
                             return "location: array expected";
                         for (var i = 0; i < message.location.length; ++i) {
-                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i]);
+                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i], long + 1);
                             if (error)
                                 return "location." + error;
                         }
@@ -38812,9 +40392,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo
                  */
-                SourceCodeInfo.fromObject = function fromObject(object) {
+                SourceCodeInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.SourceCodeInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.SourceCodeInfo();
                     if (object.location) {
                         if (!Array.isArray(object.location))
@@ -38823,7 +40407,7 @@
                         for (var i = 0; i < object.location.length; ++i) {
                             if (typeof object.location[i] !== "object")
                                 throw TypeError(".google.protobuf.SourceCodeInfo.location: object expected");
-                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i]);
+                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i], long + 1);
                         }
                     }
                     return message;
@@ -38905,7 +40489,7 @@
                         this.leadingDetachedComments = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -39019,9 +40603,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Location.decode = function decode(reader, length, error) {
+                    Location.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo.Location();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -39065,7 +40653,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -39096,9 +40684,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Location.verify = function verify(message) {
+                    Location.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.path != null && message.hasOwnProperty("path")) {
                             if (!Array.isArray(message.path))
                                 return "path: array expected";
@@ -39137,9 +40729,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.SourceCodeInfo.Location} Location
                      */
-                    Location.fromObject = function fromObject(object) {
+                    Location.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.SourceCodeInfo.Location)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.SourceCodeInfo.Location();
                         if (object.path) {
                             if (!Array.isArray(object.path))
@@ -39266,7 +40862,7 @@
                     this.annotation = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39332,9 +40928,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GeneratedCodeInfo.decode = function decode(reader, length, error) {
+                GeneratedCodeInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39344,11 +40944,11 @@
                         case 1: {
                                 if (!(message.annotation && message.annotation.length))
                                     message.annotation = [];
-                                message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32()));
+                                message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39379,14 +40979,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GeneratedCodeInfo.verify = function verify(message) {
+                GeneratedCodeInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.annotation != null && message.hasOwnProperty("annotation")) {
                         if (!Array.isArray(message.annotation))
                             return "annotation: array expected";
                         for (var i = 0; i < message.annotation.length; ++i) {
-                            var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i]);
+                            var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i], long + 1);
                             if (error)
                                 return "annotation." + error;
                         }
@@ -39402,9 +41006,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo
                  */
-                GeneratedCodeInfo.fromObject = function fromObject(object) {
+                GeneratedCodeInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.GeneratedCodeInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.GeneratedCodeInfo();
                     if (object.annotation) {
                         if (!Array.isArray(object.annotation))
@@ -39413,7 +41021,7 @@
                         for (var i = 0; i < object.annotation.length; ++i) {
                             if (typeof object.annotation[i] !== "object")
                                 throw TypeError(".google.protobuf.GeneratedCodeInfo.annotation: object expected");
-                            message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i]);
+                            message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i], long + 1);
                         }
                     }
                     return message;
@@ -39493,7 +41101,7 @@
                         this.path = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -39602,9 +41210,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Annotation.decode = function decode(reader, length, error) {
+                    Annotation.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo.Annotation();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -39639,7 +41251,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -39670,9 +41282,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Annotation.verify = function verify(message) {
+                    Annotation.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.path != null && message.hasOwnProperty("path")) {
                             if (!Array.isArray(message.path))
                                 return "path: array expected";
@@ -39709,9 +41325,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation
                      */
-                    Annotation.fromObject = function fromObject(object) {
+                    Annotation.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.GeneratedCodeInfo.Annotation)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.GeneratedCodeInfo.Annotation();
                         if (object.path) {
                             if (!Array.isArray(object.path))
@@ -39871,7 +41491,7 @@
                 function Duration(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39946,9 +41566,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Duration.decode = function decode(reader, length, error) {
+                Duration.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Duration();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39964,7 +41588,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39995,9 +41619,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Duration.verify = function verify(message) {
+                Duration.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.seconds != null && message.hasOwnProperty("seconds"))
                         if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high)))
                             return "seconds: integer|Long expected";
@@ -40015,9 +41643,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Duration} Duration
                  */
-                Duration.fromObject = function fromObject(object) {
+                Duration.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Duration)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Duration();
                     if (object.seconds != null)
                         if ($util.Long)
@@ -40114,7 +41746,7 @@
                     this.paths = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -40180,9 +41812,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldMask.decode = function decode(reader, length, error) {
+                FieldMask.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldMask();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -40196,7 +41832,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -40227,9 +41863,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldMask.verify = function verify(message) {
+                FieldMask.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.paths != null && message.hasOwnProperty("paths")) {
                         if (!Array.isArray(message.paths))
                             return "paths: array expected";
@@ -40248,9 +41888,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldMask} FieldMask
                  */
-                FieldMask.fromObject = function fromObject(object) {
+                FieldMask.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldMask)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldMask();
                     if (object.paths) {
                         if (!Array.isArray(object.paths))
@@ -40335,7 +41979,7 @@
                 function Any(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -40410,9 +42054,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Any.decode = function decode(reader, length, error) {
+                Any.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Any();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -40428,7 +42076,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -40459,9 +42107,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Any.verify = function verify(message) {
+                Any.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type_url != null && message.hasOwnProperty("type_url"))
                         if (!$util.isString(message.type_url))
                             return "type_url: string expected";
@@ -40479,9 +42131,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Any} Any
                  */
-                Any.fromObject = function fromObject(object) {
+                Any.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Any)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Any();
                     if (object.type_url != null)
                         message.type_url = String(object.type_url);
@@ -40571,7 +42227,7 @@
                 function Empty(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -40626,9 +42282,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Empty.decode = function decode(reader, length, error) {
+                Empty.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Empty();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -40636,7 +42296,7 @@
                             break;
                         switch (tag >>> 3) {
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -40667,9 +42327,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Empty.verify = function verify(message) {
+                Empty.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     return null;
                 };
     
@@ -40681,9 +42345,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Empty} Empty
                  */
-                Empty.fromObject = function fromObject(object) {
+                Empty.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Empty)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     return new $root.google.protobuf.Empty();
                 };
     
@@ -40750,7 +42418,7 @@
                 function Timestamp(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -40825,9 +42493,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Timestamp.decode = function decode(reader, length, error) {
+                Timestamp.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Timestamp();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -40843,7 +42515,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -40874,9 +42546,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Timestamp.verify = function verify(message) {
+                Timestamp.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.seconds != null && message.hasOwnProperty("seconds"))
                         if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high)))
                             return "seconds: integer|Long expected";
@@ -40894,9 +42570,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Timestamp} Timestamp
                  */
-                Timestamp.fromObject = function fromObject(object) {
+                Timestamp.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Timestamp)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Timestamp();
                     if (object.seconds != null)
                         if ($util.Long)
@@ -41149,7 +42829,7 @@
                     function SetIamPolicyRequest(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -41234,9 +42914,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    SetIamPolicyRequest.decode = function decode(reader, length, error) {
+                    SetIamPolicyRequest.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.SetIamPolicyRequest();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -41248,15 +42932,15 @@
                                     break;
                                 }
                             case 2: {
-                                    message.policy = $root.google.iam.v1.Policy.decode(reader, reader.uint32());
+                                    message.policy = $root.google.iam.v1.Policy.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 3: {
-                                    message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                    message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -41287,19 +42971,23 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    SetIamPolicyRequest.verify = function verify(message) {
+                    SetIamPolicyRequest.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.resource != null && message.hasOwnProperty("resource"))
                             if (!$util.isString(message.resource))
                                 return "resource: string expected";
                         if (message.policy != null && message.hasOwnProperty("policy")) {
-                            var error = $root.google.iam.v1.Policy.verify(message.policy);
+                            var error = $root.google.iam.v1.Policy.verify(message.policy, long + 1);
                             if (error)
                                 return "policy." + error;
                         }
                         if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                            var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                            var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                             if (error)
                                 return "updateMask." + error;
                         }
@@ -41314,21 +43002,25 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.SetIamPolicyRequest} SetIamPolicyRequest
                      */
-                    SetIamPolicyRequest.fromObject = function fromObject(object) {
+                    SetIamPolicyRequest.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.SetIamPolicyRequest)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.SetIamPolicyRequest();
                         if (object.resource != null)
                             message.resource = String(object.resource);
                         if (object.policy != null) {
                             if (typeof object.policy !== "object")
                                 throw TypeError(".google.iam.v1.SetIamPolicyRequest.policy: object expected");
-                            message.policy = $root.google.iam.v1.Policy.fromObject(object.policy);
+                            message.policy = $root.google.iam.v1.Policy.fromObject(object.policy, long + 1);
                         }
                         if (object.updateMask != null) {
                             if (typeof object.updateMask !== "object")
                                 throw TypeError(".google.iam.v1.SetIamPolicyRequest.updateMask: object expected");
-                            message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                            message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                         }
                         return message;
                     };
@@ -41410,7 +43102,7 @@
                     function GetIamPolicyRequest(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -41485,9 +43177,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    GetIamPolicyRequest.decode = function decode(reader, length, error) {
+                    GetIamPolicyRequest.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.GetIamPolicyRequest();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -41499,11 +43195,11 @@
                                     break;
                                 }
                             case 2: {
-                                    message.options = $root.google.iam.v1.GetPolicyOptions.decode(reader, reader.uint32());
+                                    message.options = $root.google.iam.v1.GetPolicyOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -41534,14 +43230,18 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    GetIamPolicyRequest.verify = function verify(message) {
+                    GetIamPolicyRequest.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.resource != null && message.hasOwnProperty("resource"))
                             if (!$util.isString(message.resource))
                                 return "resource: string expected";
                         if (message.options != null && message.hasOwnProperty("options")) {
-                            var error = $root.google.iam.v1.GetPolicyOptions.verify(message.options);
+                            var error = $root.google.iam.v1.GetPolicyOptions.verify(message.options, long + 1);
                             if (error)
                                 return "options." + error;
                         }
@@ -41556,16 +43256,20 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.GetIamPolicyRequest} GetIamPolicyRequest
                      */
-                    GetIamPolicyRequest.fromObject = function fromObject(object) {
+                    GetIamPolicyRequest.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.GetIamPolicyRequest)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.GetIamPolicyRequest();
                         if (object.resource != null)
                             message.resource = String(object.resource);
                         if (object.options != null) {
                             if (typeof object.options !== "object")
                                 throw TypeError(".google.iam.v1.GetIamPolicyRequest.options: object expected");
-                            message.options = $root.google.iam.v1.GetPolicyOptions.fromObject(object.options);
+                            message.options = $root.google.iam.v1.GetPolicyOptions.fromObject(object.options, long + 1);
                         }
                         return message;
                     };
@@ -41645,7 +43349,7 @@
                         this.permissions = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -41721,9 +43425,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    TestIamPermissionsRequest.decode = function decode(reader, length, error) {
+                    TestIamPermissionsRequest.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.TestIamPermissionsRequest();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -41741,7 +43449,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -41772,9 +43480,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    TestIamPermissionsRequest.verify = function verify(message) {
+                    TestIamPermissionsRequest.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.resource != null && message.hasOwnProperty("resource"))
                             if (!$util.isString(message.resource))
                                 return "resource: string expected";
@@ -41796,9 +43508,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.TestIamPermissionsRequest} TestIamPermissionsRequest
                      */
-                    TestIamPermissionsRequest.fromObject = function fromObject(object) {
+                    TestIamPermissionsRequest.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.TestIamPermissionsRequest)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.TestIamPermissionsRequest();
                         if (object.resource != null)
                             message.resource = String(object.resource);
@@ -41889,7 +43605,7 @@
                         this.permissions = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -41955,9 +43671,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    TestIamPermissionsResponse.decode = function decode(reader, length, error) {
+                    TestIamPermissionsResponse.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.TestIamPermissionsResponse();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -41971,7 +43691,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -42002,9 +43722,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    TestIamPermissionsResponse.verify = function verify(message) {
+                    TestIamPermissionsResponse.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.permissions != null && message.hasOwnProperty("permissions")) {
                             if (!Array.isArray(message.permissions))
                                 return "permissions: array expected";
@@ -42023,9 +43747,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.TestIamPermissionsResponse} TestIamPermissionsResponse
                      */
-                    TestIamPermissionsResponse.fromObject = function fromObject(object) {
+                    TestIamPermissionsResponse.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.TestIamPermissionsResponse)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.TestIamPermissionsResponse();
                         if (object.permissions) {
                             if (!Array.isArray(object.permissions))
@@ -42109,7 +43837,7 @@
                     function GetPolicyOptions(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -42174,9 +43902,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    GetPolicyOptions.decode = function decode(reader, length, error) {
+                    GetPolicyOptions.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.GetPolicyOptions();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -42188,7 +43920,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -42219,9 +43951,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    GetPolicyOptions.verify = function verify(message) {
+                    GetPolicyOptions.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.requestedPolicyVersion != null && message.hasOwnProperty("requestedPolicyVersion"))
                             if (!$util.isInteger(message.requestedPolicyVersion))
                                 return "requestedPolicyVersion: integer expected";
@@ -42236,9 +43972,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.GetPolicyOptions} GetPolicyOptions
                      */
-                    GetPolicyOptions.fromObject = function fromObject(object) {
+                    GetPolicyOptions.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.GetPolicyOptions)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.GetPolicyOptions();
                         if (object.requestedPolicyVersion != null)
                             message.requestedPolicyVersion = object.requestedPolicyVersion | 0;
@@ -42319,7 +44059,7 @@
                         this.auditConfigs = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -42416,9 +44156,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Policy.decode = function decode(reader, length, error) {
+                    Policy.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.Policy();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -42432,13 +44176,13 @@
                             case 4: {
                                     if (!(message.bindings && message.bindings.length))
                                         message.bindings = [];
-                                    message.bindings.push($root.google.iam.v1.Binding.decode(reader, reader.uint32()));
+                                    message.bindings.push($root.google.iam.v1.Binding.decode(reader, reader.uint32(), undefined, long + 1));
                                     break;
                                 }
                             case 6: {
                                     if (!(message.auditConfigs && message.auditConfigs.length))
                                         message.auditConfigs = [];
-                                    message.auditConfigs.push($root.google.iam.v1.AuditConfig.decode(reader, reader.uint32()));
+                                    message.auditConfigs.push($root.google.iam.v1.AuditConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                     break;
                                 }
                             case 3: {
@@ -42446,7 +44190,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -42477,9 +44221,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Policy.verify = function verify(message) {
+                    Policy.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.version != null && message.hasOwnProperty("version"))
                             if (!$util.isInteger(message.version))
                                 return "version: integer expected";
@@ -42487,7 +44235,7 @@
                             if (!Array.isArray(message.bindings))
                                 return "bindings: array expected";
                             for (var i = 0; i < message.bindings.length; ++i) {
-                                var error = $root.google.iam.v1.Binding.verify(message.bindings[i]);
+                                var error = $root.google.iam.v1.Binding.verify(message.bindings[i], long + 1);
                                 if (error)
                                     return "bindings." + error;
                             }
@@ -42496,7 +44244,7 @@
                             if (!Array.isArray(message.auditConfigs))
                                 return "auditConfigs: array expected";
                             for (var i = 0; i < message.auditConfigs.length; ++i) {
-                                var error = $root.google.iam.v1.AuditConfig.verify(message.auditConfigs[i]);
+                                var error = $root.google.iam.v1.AuditConfig.verify(message.auditConfigs[i], long + 1);
                                 if (error)
                                     return "auditConfigs." + error;
                             }
@@ -42515,9 +44263,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.Policy} Policy
                      */
-                    Policy.fromObject = function fromObject(object) {
+                    Policy.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.Policy)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.Policy();
                         if (object.version != null)
                             message.version = object.version | 0;
@@ -42528,7 +44280,7 @@
                             for (var i = 0; i < object.bindings.length; ++i) {
                                 if (typeof object.bindings[i] !== "object")
                                     throw TypeError(".google.iam.v1.Policy.bindings: object expected");
-                                message.bindings[i] = $root.google.iam.v1.Binding.fromObject(object.bindings[i]);
+                                message.bindings[i] = $root.google.iam.v1.Binding.fromObject(object.bindings[i], long + 1);
                             }
                         }
                         if (object.auditConfigs) {
@@ -42538,7 +44290,7 @@
                             for (var i = 0; i < object.auditConfigs.length; ++i) {
                                 if (typeof object.auditConfigs[i] !== "object")
                                     throw TypeError(".google.iam.v1.Policy.auditConfigs: object expected");
-                                message.auditConfigs[i] = $root.google.iam.v1.AuditConfig.fromObject(object.auditConfigs[i]);
+                                message.auditConfigs[i] = $root.google.iam.v1.AuditConfig.fromObject(object.auditConfigs[i], long + 1);
                             }
                         }
                         if (object.etag != null)
@@ -42645,7 +44397,7 @@
                         this.members = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -42731,9 +44483,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Binding.decode = function decode(reader, length, error) {
+                    Binding.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.Binding();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -42751,11 +44507,11 @@
                                     break;
                                 }
                             case 3: {
-                                    message.condition = $root.google.type.Expr.decode(reader, reader.uint32());
+                                    message.condition = $root.google.type.Expr.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -42786,9 +44542,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Binding.verify = function verify(message) {
+                    Binding.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.role != null && message.hasOwnProperty("role"))
                             if (!$util.isString(message.role))
                                 return "role: string expected";
@@ -42800,7 +44560,7 @@
                                     return "members: string[] expected";
                         }
                         if (message.condition != null && message.hasOwnProperty("condition")) {
-                            var error = $root.google.type.Expr.verify(message.condition);
+                            var error = $root.google.type.Expr.verify(message.condition, long + 1);
                             if (error)
                                 return "condition." + error;
                         }
@@ -42815,9 +44575,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.Binding} Binding
                      */
-                    Binding.fromObject = function fromObject(object) {
+                    Binding.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.Binding)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.Binding();
                         if (object.role != null)
                             message.role = String(object.role);
@@ -42831,7 +44595,7 @@
                         if (object.condition != null) {
                             if (typeof object.condition !== "object")
                                 throw TypeError(".google.iam.v1.Binding.condition: object expected");
-                            message.condition = $root.google.type.Expr.fromObject(object.condition);
+                            message.condition = $root.google.type.Expr.fromObject(object.condition, long + 1);
                         }
                         return message;
                     };
@@ -42918,7 +44682,7 @@
                         this.auditLogConfigs = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -42994,9 +44758,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    AuditConfig.decode = function decode(reader, length, error) {
+                    AuditConfig.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.AuditConfig();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -43010,11 +44778,11 @@
                             case 3: {
                                     if (!(message.auditLogConfigs && message.auditLogConfigs.length))
                                         message.auditLogConfigs = [];
-                                    message.auditLogConfigs.push($root.google.iam.v1.AuditLogConfig.decode(reader, reader.uint32()));
+                                    message.auditLogConfigs.push($root.google.iam.v1.AuditLogConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -43045,9 +44813,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    AuditConfig.verify = function verify(message) {
+                    AuditConfig.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.service != null && message.hasOwnProperty("service"))
                             if (!$util.isString(message.service))
                                 return "service: string expected";
@@ -43055,7 +44827,7 @@
                             if (!Array.isArray(message.auditLogConfigs))
                                 return "auditLogConfigs: array expected";
                             for (var i = 0; i < message.auditLogConfigs.length; ++i) {
-                                var error = $root.google.iam.v1.AuditLogConfig.verify(message.auditLogConfigs[i]);
+                                var error = $root.google.iam.v1.AuditLogConfig.verify(message.auditLogConfigs[i], long + 1);
                                 if (error)
                                     return "auditLogConfigs." + error;
                             }
@@ -43071,9 +44843,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.AuditConfig} AuditConfig
                      */
-                    AuditConfig.fromObject = function fromObject(object) {
+                    AuditConfig.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.AuditConfig)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.AuditConfig();
                         if (object.service != null)
                             message.service = String(object.service);
@@ -43084,7 +44860,7 @@
                             for (var i = 0; i < object.auditLogConfigs.length; ++i) {
                                 if (typeof object.auditLogConfigs[i] !== "object")
                                     throw TypeError(".google.iam.v1.AuditConfig.auditLogConfigs: object expected");
-                                message.auditLogConfigs[i] = $root.google.iam.v1.AuditLogConfig.fromObject(object.auditLogConfigs[i]);
+                                message.auditLogConfigs[i] = $root.google.iam.v1.AuditLogConfig.fromObject(object.auditLogConfigs[i], long + 1);
                             }
                         }
                         return message;
@@ -43168,7 +44944,7 @@
                         this.exemptedMembers = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -43244,9 +45020,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    AuditLogConfig.decode = function decode(reader, length, error) {
+                    AuditLogConfig.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.AuditLogConfig();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -43264,7 +45044,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -43295,9 +45075,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    AuditLogConfig.verify = function verify(message) {
+                    AuditLogConfig.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.logType != null && message.hasOwnProperty("logType"))
                             switch (message.logType) {
                             default:
@@ -43326,9 +45110,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.AuditLogConfig} AuditLogConfig
                      */
-                    AuditLogConfig.fromObject = function fromObject(object) {
+                    AuditLogConfig.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.AuditLogConfig)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.AuditLogConfig();
                         switch (object.logType) {
                         default:
@@ -43461,7 +45249,7 @@
                         this.auditConfigDeltas = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -43538,9 +45326,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    PolicyDelta.decode = function decode(reader, length, error) {
+                    PolicyDelta.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.PolicyDelta();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -43550,17 +45342,17 @@
                             case 1: {
                                     if (!(message.bindingDeltas && message.bindingDeltas.length))
                                         message.bindingDeltas = [];
-                                    message.bindingDeltas.push($root.google.iam.v1.BindingDelta.decode(reader, reader.uint32()));
+                                    message.bindingDeltas.push($root.google.iam.v1.BindingDelta.decode(reader, reader.uint32(), undefined, long + 1));
                                     break;
                                 }
                             case 2: {
                                     if (!(message.auditConfigDeltas && message.auditConfigDeltas.length))
                                         message.auditConfigDeltas = [];
-                                    message.auditConfigDeltas.push($root.google.iam.v1.AuditConfigDelta.decode(reader, reader.uint32()));
+                                    message.auditConfigDeltas.push($root.google.iam.v1.AuditConfigDelta.decode(reader, reader.uint32(), undefined, long + 1));
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -43591,14 +45383,18 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    PolicyDelta.verify = function verify(message) {
+                    PolicyDelta.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.bindingDeltas != null && message.hasOwnProperty("bindingDeltas")) {
                             if (!Array.isArray(message.bindingDeltas))
                                 return "bindingDeltas: array expected";
                             for (var i = 0; i < message.bindingDeltas.length; ++i) {
-                                var error = $root.google.iam.v1.BindingDelta.verify(message.bindingDeltas[i]);
+                                var error = $root.google.iam.v1.BindingDelta.verify(message.bindingDeltas[i], long + 1);
                                 if (error)
                                     return "bindingDeltas." + error;
                             }
@@ -43607,7 +45403,7 @@
                             if (!Array.isArray(message.auditConfigDeltas))
                                 return "auditConfigDeltas: array expected";
                             for (var i = 0; i < message.auditConfigDeltas.length; ++i) {
-                                var error = $root.google.iam.v1.AuditConfigDelta.verify(message.auditConfigDeltas[i]);
+                                var error = $root.google.iam.v1.AuditConfigDelta.verify(message.auditConfigDeltas[i], long + 1);
                                 if (error)
                                     return "auditConfigDeltas." + error;
                             }
@@ -43623,9 +45419,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.PolicyDelta} PolicyDelta
                      */
-                    PolicyDelta.fromObject = function fromObject(object) {
+                    PolicyDelta.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.PolicyDelta)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.PolicyDelta();
                         if (object.bindingDeltas) {
                             if (!Array.isArray(object.bindingDeltas))
@@ -43634,7 +45434,7 @@
                             for (var i = 0; i < object.bindingDeltas.length; ++i) {
                                 if (typeof object.bindingDeltas[i] !== "object")
                                     throw TypeError(".google.iam.v1.PolicyDelta.bindingDeltas: object expected");
-                                message.bindingDeltas[i] = $root.google.iam.v1.BindingDelta.fromObject(object.bindingDeltas[i]);
+                                message.bindingDeltas[i] = $root.google.iam.v1.BindingDelta.fromObject(object.bindingDeltas[i], long + 1);
                             }
                         }
                         if (object.auditConfigDeltas) {
@@ -43644,7 +45444,7 @@
                             for (var i = 0; i < object.auditConfigDeltas.length; ++i) {
                                 if (typeof object.auditConfigDeltas[i] !== "object")
                                     throw TypeError(".google.iam.v1.PolicyDelta.auditConfigDeltas: object expected");
-                                message.auditConfigDeltas[i] = $root.google.iam.v1.AuditConfigDelta.fromObject(object.auditConfigDeltas[i]);
+                                message.auditConfigDeltas[i] = $root.google.iam.v1.AuditConfigDelta.fromObject(object.auditConfigDeltas[i], long + 1);
                             }
                         }
                         return message;
@@ -43732,7 +45532,7 @@
                     function BindingDelta(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -43827,9 +45627,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    BindingDelta.decode = function decode(reader, length, error) {
+                    BindingDelta.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.BindingDelta();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -43849,11 +45653,11 @@
                                     break;
                                 }
                             case 4: {
-                                    message.condition = $root.google.type.Expr.decode(reader, reader.uint32());
+                                    message.condition = $root.google.type.Expr.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -43884,9 +45688,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    BindingDelta.verify = function verify(message) {
+                    BindingDelta.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.action != null && message.hasOwnProperty("action"))
                             switch (message.action) {
                             default:
@@ -43903,7 +45711,7 @@
                             if (!$util.isString(message.member))
                                 return "member: string expected";
                         if (message.condition != null && message.hasOwnProperty("condition")) {
-                            var error = $root.google.type.Expr.verify(message.condition);
+                            var error = $root.google.type.Expr.verify(message.condition, long + 1);
                             if (error)
                                 return "condition." + error;
                         }
@@ -43918,9 +45726,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.BindingDelta} BindingDelta
                      */
-                    BindingDelta.fromObject = function fromObject(object) {
+                    BindingDelta.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.BindingDelta)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.BindingDelta();
                         switch (object.action) {
                         default:
@@ -43949,7 +45761,7 @@
                         if (object.condition != null) {
                             if (typeof object.condition !== "object")
                                 throw TypeError(".google.iam.v1.BindingDelta.condition: object expected");
-                            message.condition = $root.google.type.Expr.fromObject(object.condition);
+                            message.condition = $root.google.type.Expr.fromObject(object.condition, long + 1);
                         }
                         return message;
                     };
@@ -44052,7 +45864,7 @@
                     function AuditConfigDelta(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -44147,9 +45959,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    AuditConfigDelta.decode = function decode(reader, length, error) {
+                    AuditConfigDelta.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.AuditConfigDelta();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -44173,7 +45989,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -44204,9 +46020,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    AuditConfigDelta.verify = function verify(message) {
+                    AuditConfigDelta.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.action != null && message.hasOwnProperty("action"))
                             switch (message.action) {
                             default:
@@ -44236,9 +46056,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.AuditConfigDelta} AuditConfigDelta
                      */
-                    AuditConfigDelta.fromObject = function fromObject(object) {
+                    AuditConfigDelta.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.AuditConfigDelta)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.AuditConfigDelta();
                         switch (object.action) {
                         default:
@@ -44382,7 +46206,7 @@
                 function Expr(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -44477,9 +46301,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Expr.decode = function decode(reader, length, error) {
+                Expr.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.type.Expr();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -44503,7 +46331,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -44534,9 +46362,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Expr.verify = function verify(message) {
+                Expr.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.expression != null && message.hasOwnProperty("expression"))
                         if (!$util.isString(message.expression))
                             return "expression: string expected";
@@ -44560,9 +46392,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.type.Expr} Expr
                  */
-                Expr.fromObject = function fromObject(object) {
+                Expr.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.type.Expr)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.type.Expr();
                     if (object.expression != null)
                         message.expression = String(object.expression);
@@ -44870,7 +46706,7 @@
                 function Operation(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -44989,9 +46825,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Operation.decode = function decode(reader, length, error) {
+                Operation.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.Operation();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -45003,7 +46843,7 @@
                                 break;
                             }
                         case 2: {
-                                message.metadata = $root.google.protobuf.Any.decode(reader, reader.uint32());
+                                message.metadata = $root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -45011,15 +46851,15 @@
                                 break;
                             }
                         case 4: {
-                                message.error = $root.google.rpc.Status.decode(reader, reader.uint32());
+                                message.error = $root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 5: {
-                                message.response = $root.google.protobuf.Any.decode(reader, reader.uint32());
+                                message.response = $root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -45050,15 +46890,19 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Operation.verify = function verify(message) {
+                Operation.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.metadata != null && message.hasOwnProperty("metadata")) {
-                        var error = $root.google.protobuf.Any.verify(message.metadata);
+                        var error = $root.google.protobuf.Any.verify(message.metadata, long + 1);
                         if (error)
                             return "metadata." + error;
                     }
@@ -45068,7 +46912,7 @@
                     if (message.error != null && message.hasOwnProperty("error")) {
                         properties.result = 1;
                         {
-                            var error = $root.google.rpc.Status.verify(message.error);
+                            var error = $root.google.rpc.Status.verify(message.error, long + 1);
                             if (error)
                                 return "error." + error;
                         }
@@ -45078,7 +46922,7 @@
                             return "result: multiple values";
                         properties.result = 1;
                         {
-                            var error = $root.google.protobuf.Any.verify(message.response);
+                            var error = $root.google.protobuf.Any.verify(message.response, long + 1);
                             if (error)
                                 return "response." + error;
                         }
@@ -45094,28 +46938,32 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.Operation} Operation
                  */
-                Operation.fromObject = function fromObject(object) {
+                Operation.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.Operation)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.Operation();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.metadata != null) {
                         if (typeof object.metadata !== "object")
                             throw TypeError(".google.longrunning.Operation.metadata: object expected");
-                        message.metadata = $root.google.protobuf.Any.fromObject(object.metadata);
+                        message.metadata = $root.google.protobuf.Any.fromObject(object.metadata, long + 1);
                     }
                     if (object.done != null)
                         message.done = Boolean(object.done);
                     if (object.error != null) {
                         if (typeof object.error !== "object")
                             throw TypeError(".google.longrunning.Operation.error: object expected");
-                        message.error = $root.google.rpc.Status.fromObject(object.error);
+                        message.error = $root.google.rpc.Status.fromObject(object.error, long + 1);
                     }
                     if (object.response != null) {
                         if (typeof object.response !== "object")
                             throw TypeError(".google.longrunning.Operation.response: object expected");
-                        message.response = $root.google.protobuf.Any.fromObject(object.response);
+                        message.response = $root.google.protobuf.Any.fromObject(object.response, long + 1);
                     }
                     return message;
                 };
@@ -45206,7 +47054,7 @@
                 function GetOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -45271,9 +47119,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GetOperationRequest.decode = function decode(reader, length, error) {
+                GetOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.GetOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -45285,7 +47137,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -45316,9 +47168,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GetOperationRequest.verify = function verify(message) {
+                GetOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -45333,9 +47189,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.GetOperationRequest} GetOperationRequest
                  */
-                GetOperationRequest.fromObject = function fromObject(object) {
+                GetOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.GetOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.GetOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -45414,7 +47274,7 @@
                 function ListOperationsRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -45509,9 +47369,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListOperationsRequest.decode = function decode(reader, length, error) {
+                ListOperationsRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.ListOperationsRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -45535,7 +47399,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -45566,9 +47430,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListOperationsRequest.verify = function verify(message) {
+                ListOperationsRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -45592,9 +47460,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.ListOperationsRequest} ListOperationsRequest
                  */
-                ListOperationsRequest.fromObject = function fromObject(object) {
+                ListOperationsRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.ListOperationsRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.ListOperationsRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -45688,7 +47560,7 @@
                     this.operations = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -45764,9 +47636,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListOperationsResponse.decode = function decode(reader, length, error) {
+                ListOperationsResponse.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.ListOperationsResponse();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -45776,7 +47652,7 @@
                         case 1: {
                                 if (!(message.operations && message.operations.length))
                                     message.operations = [];
-                                message.operations.push($root.google.longrunning.Operation.decode(reader, reader.uint32()));
+                                message.operations.push($root.google.longrunning.Operation.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
@@ -45784,7 +47660,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -45815,14 +47691,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListOperationsResponse.verify = function verify(message) {
+                ListOperationsResponse.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.operations != null && message.hasOwnProperty("operations")) {
                         if (!Array.isArray(message.operations))
                             return "operations: array expected";
                         for (var i = 0; i < message.operations.length; ++i) {
-                            var error = $root.google.longrunning.Operation.verify(message.operations[i]);
+                            var error = $root.google.longrunning.Operation.verify(message.operations[i], long + 1);
                             if (error)
                                 return "operations." + error;
                         }
@@ -45841,9 +47721,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.ListOperationsResponse} ListOperationsResponse
                  */
-                ListOperationsResponse.fromObject = function fromObject(object) {
+                ListOperationsResponse.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.ListOperationsResponse)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.ListOperationsResponse();
                     if (object.operations) {
                         if (!Array.isArray(object.operations))
@@ -45852,7 +47736,7 @@
                         for (var i = 0; i < object.operations.length; ++i) {
                             if (typeof object.operations[i] !== "object")
                                 throw TypeError(".google.longrunning.ListOperationsResponse.operations: object expected");
-                            message.operations[i] = $root.google.longrunning.Operation.fromObject(object.operations[i]);
+                            message.operations[i] = $root.google.longrunning.Operation.fromObject(object.operations[i], long + 1);
                         }
                     }
                     if (object.nextPageToken != null)
@@ -45936,7 +47820,7 @@
                 function CancelOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -46001,9 +47885,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CancelOperationRequest.decode = function decode(reader, length, error) {
+                CancelOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.CancelOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -46015,7 +47903,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -46046,9 +47934,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CancelOperationRequest.verify = function verify(message) {
+                CancelOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -46063,9 +47955,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.CancelOperationRequest} CancelOperationRequest
                  */
-                CancelOperationRequest.fromObject = function fromObject(object) {
+                CancelOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.CancelOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.CancelOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -46141,7 +48037,7 @@
                 function DeleteOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -46206,9 +48102,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DeleteOperationRequest.decode = function decode(reader, length, error) {
+                DeleteOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.DeleteOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -46220,7 +48120,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -46251,9 +48151,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DeleteOperationRequest.verify = function verify(message) {
+                DeleteOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -46268,9 +48172,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.DeleteOperationRequest} DeleteOperationRequest
                  */
-                DeleteOperationRequest.fromObject = function fromObject(object) {
+                DeleteOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.DeleteOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.DeleteOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -46347,7 +48255,7 @@
                 function WaitOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -46422,9 +48330,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                WaitOperationRequest.decode = function decode(reader, length, error) {
+                WaitOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.WaitOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -46436,11 +48348,11 @@
                                 break;
                             }
                         case 2: {
-                                message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -46471,14 +48383,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                WaitOperationRequest.verify = function verify(message) {
+                WaitOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.timeout != null && message.hasOwnProperty("timeout")) {
-                        var error = $root.google.protobuf.Duration.verify(message.timeout);
+                        var error = $root.google.protobuf.Duration.verify(message.timeout, long + 1);
                         if (error)
                             return "timeout." + error;
                     }
@@ -46493,16 +48409,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.WaitOperationRequest} WaitOperationRequest
                  */
-                WaitOperationRequest.fromObject = function fromObject(object) {
+                WaitOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.WaitOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.WaitOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.timeout != null) {
                         if (typeof object.timeout !== "object")
                             throw TypeError(".google.longrunning.WaitOperationRequest.timeout: object expected");
-                        message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout);
+                        message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout, long + 1);
                     }
                     return message;
                 };
@@ -46581,7 +48501,7 @@
                 function OperationInfo(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -46656,9 +48576,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OperationInfo.decode = function decode(reader, length, error) {
+                OperationInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.OperationInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -46674,7 +48598,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -46705,9 +48629,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OperationInfo.verify = function verify(message) {
+                OperationInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.responseType != null && message.hasOwnProperty("responseType"))
                         if (!$util.isString(message.responseType))
                             return "responseType: string expected";
@@ -46725,9 +48653,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.OperationInfo} OperationInfo
                  */
-                OperationInfo.fromObject = function fromObject(object) {
+                OperationInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.OperationInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.OperationInfo();
                     if (object.responseType != null)
                         message.responseType = String(object.responseType);
@@ -46824,7 +48756,7 @@
                     this.details = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -46910,9 +48842,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Status.decode = function decode(reader, length, error) {
+                Status.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.rpc.Status();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -46930,11 +48866,11 @@
                         case 3: {
                                 if (!(message.details && message.details.length))
                                     message.details = [];
-                                message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32()));
+                                message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -46965,9 +48901,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Status.verify = function verify(message) {
+                Status.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.code != null && message.hasOwnProperty("code"))
                         if (!$util.isInteger(message.code))
                             return "code: integer expected";
@@ -46978,7 +48918,7 @@
                         if (!Array.isArray(message.details))
                             return "details: array expected";
                         for (var i = 0; i < message.details.length; ++i) {
-                            var error = $root.google.protobuf.Any.verify(message.details[i]);
+                            var error = $root.google.protobuf.Any.verify(message.details[i], long + 1);
                             if (error)
                                 return "details." + error;
                         }
@@ -46994,9 +48934,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.rpc.Status} Status
                  */
-                Status.fromObject = function fromObject(object) {
+                Status.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.rpc.Status)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.rpc.Status();
                     if (object.code != null)
                         message.code = object.code | 0;
@@ -47009,7 +48953,7 @@
                         for (var i = 0; i < object.details.length; ++i) {
                             if (typeof object.details[i] !== "object")
                                 throw TypeError(".google.rpc.Status.details: object expected");
-                            message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i]);
+                            message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i], long + 1);
                         }
                     }
                     return message;
diff --git a/packages/google-cloud-retail/README.md b/packages/google-cloud-retail/README.md
index 270c99fd2a27..635043087a60 100644
--- a/packages/google-cloud-retail/README.md
+++ b/packages/google-cloud-retail/README.md
@@ -112,7 +112,6 @@ Samples are in the [`samples/`][homepage_samples] directory. Each sample's `READ
 | list serving configs | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2/serving_config_service.list_serving_configs.js) |
 | remove control | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2/serving_config_service.remove_control.js) |
 | update serving config | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2/serving_config_service.update_serving_config.js) |
-| cloud | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2/snippet_metadata_google.cloud.retail.v2.json) |
 | collect user event | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2/user_event_service.collect_user_event.js) |
 | import user events | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2/user_event_service.import_user_events.js) |
 | purge user events | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2/user_event_service.purge_user_events.js) |
@@ -187,7 +186,6 @@ Samples are in the [`samples/`][homepage_samples] directory. Each sample's `READ
 | list serving configs | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2alpha/serving_config_service.list_serving_configs.js) |
 | remove control | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2alpha/serving_config_service.remove_control.js) |
 | update serving config | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2alpha/serving_config_service.update_serving_config.js) |
-| cloud | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2alpha/snippet_metadata_google.cloud.retail.v2alpha.json) |
 | collect user event | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2alpha/user_event_service.collect_user_event.js) |
 | export user events | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2alpha/user_event_service.export_user_events.js) |
 | import user events | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2alpha/user_event_service.import_user_events.js) |
@@ -252,7 +250,6 @@ Samples are in the [`samples/`][homepage_samples] directory. Each sample's `READ
 | list serving configs | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2beta/serving_config_service.list_serving_configs.js) |
 | remove control | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2beta/serving_config_service.remove_control.js) |
 | update serving config | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2beta/serving_config_service.update_serving_config.js) |
-| cloud | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2beta/snippet_metadata_google.cloud.retail.v2beta.json) |
 | collect user event | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2beta/user_event_service.collect_user_event.js) |
 | export user events | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2beta/user_event_service.export_user_events.js) |
 | import user events | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-retail/samples/generated/v2beta/user_event_service.import_user_events.js) |
diff --git a/packages/google-cloud-retail/protos/protos.js b/packages/google-cloud-retail/protos/protos.js
index 33a46e417fb7..c74d5c7f72ee 100644
--- a/packages/google-cloud-retail/protos/protos.js
+++ b/packages/google-cloud-retail/protos/protos.js
@@ -155,7 +155,7 @@
                         function OutputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -244,9 +244,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        OutputConfig.decode = function decode(reader, length, error) {
+                        OutputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.OutputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -254,15 +258,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.gcsDestination = $root.google.cloud.retail.v2.OutputConfig.GcsDestination.decode(reader, reader.uint32());
+                                        message.gcsDestination = $root.google.cloud.retail.v2.OutputConfig.GcsDestination.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.bigqueryDestination = $root.google.cloud.retail.v2.OutputConfig.BigQueryDestination.decode(reader, reader.uint32());
+                                        message.bigqueryDestination = $root.google.cloud.retail.v2.OutputConfig.BigQueryDestination.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -293,14 +297,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        OutputConfig.verify = function verify(message) {
+                        OutputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsDestination != null && message.hasOwnProperty("gcsDestination")) {
                                 properties.destination = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.OutputConfig.GcsDestination.verify(message.gcsDestination);
+                                    var error = $root.google.cloud.retail.v2.OutputConfig.GcsDestination.verify(message.gcsDestination, long + 1);
                                     if (error)
                                         return "gcsDestination." + error;
                                 }
@@ -310,7 +318,7 @@
                                     return "destination: multiple values";
                                 properties.destination = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.OutputConfig.BigQueryDestination.verify(message.bigqueryDestination);
+                                    var error = $root.google.cloud.retail.v2.OutputConfig.BigQueryDestination.verify(message.bigqueryDestination, long + 1);
                                     if (error)
                                         return "bigqueryDestination." + error;
                                 }
@@ -326,19 +334,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.OutputConfig} OutputConfig
                          */
-                        OutputConfig.fromObject = function fromObject(object) {
+                        OutputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.OutputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.OutputConfig();
                             if (object.gcsDestination != null) {
                                 if (typeof object.gcsDestination !== "object")
                                     throw TypeError(".google.cloud.retail.v2.OutputConfig.gcsDestination: object expected");
-                                message.gcsDestination = $root.google.cloud.retail.v2.OutputConfig.GcsDestination.fromObject(object.gcsDestination);
+                                message.gcsDestination = $root.google.cloud.retail.v2.OutputConfig.GcsDestination.fromObject(object.gcsDestination, long + 1);
                             }
                             if (object.bigqueryDestination != null) {
                                 if (typeof object.bigqueryDestination !== "object")
                                     throw TypeError(".google.cloud.retail.v2.OutputConfig.bigqueryDestination: object expected");
-                                message.bigqueryDestination = $root.google.cloud.retail.v2.OutputConfig.BigQueryDestination.fromObject(object.bigqueryDestination);
+                                message.bigqueryDestination = $root.google.cloud.retail.v2.OutputConfig.BigQueryDestination.fromObject(object.bigqueryDestination, long + 1);
                             }
                             return message;
                         };
@@ -415,7 +427,7 @@
                             function GcsDestination(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -480,9 +492,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GcsDestination.decode = function decode(reader, length, error) {
+                            GcsDestination.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.OutputConfig.GcsDestination();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -494,7 +510,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -525,9 +541,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GcsDestination.verify = function verify(message) {
+                            GcsDestination.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.outputUriPrefix != null && message.hasOwnProperty("outputUriPrefix"))
                                     if (!$util.isString(message.outputUriPrefix))
                                         return "outputUriPrefix: string expected";
@@ -542,9 +562,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.OutputConfig.GcsDestination} GcsDestination
                              */
-                            GcsDestination.fromObject = function fromObject(object) {
+                            GcsDestination.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.OutputConfig.GcsDestination)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.OutputConfig.GcsDestination();
                                 if (object.outputUriPrefix != null)
                                     message.outputUriPrefix = String(object.outputUriPrefix);
@@ -622,7 +646,7 @@
                             function BigQueryDestination(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -707,9 +731,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BigQueryDestination.decode = function decode(reader, length, error) {
+                            BigQueryDestination.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.OutputConfig.BigQueryDestination();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -729,7 +757,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -760,9 +788,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BigQueryDestination.verify = function verify(message) {
+                            BigQueryDestination.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.datasetId != null && message.hasOwnProperty("datasetId"))
                                     if (!$util.isString(message.datasetId))
                                         return "datasetId: string expected";
@@ -783,9 +815,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.OutputConfig.BigQueryDestination} BigQueryDestination
                              */
-                            BigQueryDestination.fromObject = function fromObject(object) {
+                            BigQueryDestination.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.OutputConfig.BigQueryDestination)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.OutputConfig.BigQueryDestination();
                                 if (object.datasetId != null)
                                     message.datasetId = String(object.datasetId);
@@ -875,7 +911,7 @@
                         function ExportErrorsConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -954,9 +990,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportErrorsConfig.decode = function decode(reader, length, error) {
+                        ExportErrorsConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ExportErrorsConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -968,7 +1008,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -999,9 +1039,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportErrorsConfig.verify = function verify(message) {
+                        ExportErrorsConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsPrefix != null && message.hasOwnProperty("gcsPrefix")) {
                                 properties.destination = 1;
@@ -1019,9 +1063,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ExportErrorsConfig} ExportErrorsConfig
                          */
-                        ExportErrorsConfig.fromObject = function fromObject(object) {
+                        ExportErrorsConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ExportErrorsConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ExportErrorsConfig();
                             if (object.gcsPrefix != null)
                                 message.gcsPrefix = String(object.gcsPrefix);
@@ -1100,7 +1148,7 @@
                         function ExportAnalyticsMetricsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1185,9 +1233,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportAnalyticsMetricsRequest.decode = function decode(reader, length, error) {
+                        ExportAnalyticsMetricsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ExportAnalyticsMetricsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1199,7 +1251,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.outputConfig = $root.google.cloud.retail.v2.OutputConfig.decode(reader, reader.uint32());
+                                        message.outputConfig = $root.google.cloud.retail.v2.OutputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -1207,7 +1259,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -1238,14 +1290,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportAnalyticsMetricsRequest.verify = function verify(message) {
+                        ExportAnalyticsMetricsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
                             if (message.outputConfig != null && message.hasOwnProperty("outputConfig")) {
-                                var error = $root.google.cloud.retail.v2.OutputConfig.verify(message.outputConfig);
+                                var error = $root.google.cloud.retail.v2.OutputConfig.verify(message.outputConfig, long + 1);
                                 if (error)
                                     return "outputConfig." + error;
                             }
@@ -1263,16 +1319,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ExportAnalyticsMetricsRequest} ExportAnalyticsMetricsRequest
                          */
-                        ExportAnalyticsMetricsRequest.fromObject = function fromObject(object) {
+                        ExportAnalyticsMetricsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ExportAnalyticsMetricsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ExportAnalyticsMetricsRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
                             if (object.outputConfig != null) {
                                 if (typeof object.outputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ExportAnalyticsMetricsRequest.outputConfig: object expected");
-                                message.outputConfig = $root.google.cloud.retail.v2.OutputConfig.fromObject(object.outputConfig);
+                                message.outputConfig = $root.google.cloud.retail.v2.OutputConfig.fromObject(object.outputConfig, long + 1);
                             }
                             if (object.filter != null)
                                 message.filter = String(object.filter);
@@ -1356,7 +1416,7 @@
                         function ExportMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1431,9 +1491,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportMetadata.decode = function decode(reader, length, error) {
+                        ExportMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ExportMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1441,15 +1505,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -1480,16 +1544,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportMetadata.verify = function verify(message) {
+                        ExportMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -1504,19 +1572,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ExportMetadata} ExportMetadata
                          */
-                        ExportMetadata.fromObject = function fromObject(object) {
+                        ExportMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ExportMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ExportMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ExportMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ExportMetadata.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             return message;
                         };
@@ -1597,7 +1669,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1683,9 +1755,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportAnalyticsMetricsResponse.decode = function decode(reader, length, error) {
+                        ExportAnalyticsMetricsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ExportAnalyticsMetricsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1695,19 +1771,19 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2.ExportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2.ExportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.outputResult = $root.google.cloud.retail.v2.OutputResult.decode(reader, reader.uint32());
+                                        message.outputResult = $root.google.cloud.retail.v2.OutputResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -1738,25 +1814,29 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportAnalyticsMetricsResponse.verify = function verify(message) {
+                        ExportAnalyticsMetricsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2.ExportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2.ExportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.outputResult != null && message.hasOwnProperty("outputResult")) {
-                                var error = $root.google.cloud.retail.v2.OutputResult.verify(message.outputResult);
+                                var error = $root.google.cloud.retail.v2.OutputResult.verify(message.outputResult, long + 1);
                                 if (error)
                                     return "outputResult." + error;
                             }
@@ -1771,9 +1851,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ExportAnalyticsMetricsResponse} ExportAnalyticsMetricsResponse
                          */
-                        ExportAnalyticsMetricsResponse.fromObject = function fromObject(object) {
+                        ExportAnalyticsMetricsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ExportAnalyticsMetricsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ExportAnalyticsMetricsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -1782,18 +1866,18 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ExportAnalyticsMetricsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ExportAnalyticsMetricsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2.ExportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2.ExportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.outputResult != null) {
                                 if (typeof object.outputResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ExportAnalyticsMetricsResponse.outputResult: object expected");
-                                message.outputResult = $root.google.cloud.retail.v2.OutputResult.fromObject(object.outputResult);
+                                message.outputResult = $root.google.cloud.retail.v2.OutputResult.fromObject(object.outputResult, long + 1);
                             }
                             return message;
                         };
@@ -1881,7 +1965,7 @@
                             this.gcsResult = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1958,9 +2042,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        OutputResult.decode = function decode(reader, length, error) {
+                        OutputResult.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.OutputResult();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1970,17 +2058,17 @@
                                 case 1: {
                                         if (!(message.bigqueryResult && message.bigqueryResult.length))
                                             message.bigqueryResult = [];
-                                        message.bigqueryResult.push($root.google.cloud.retail.v2.BigQueryOutputResult.decode(reader, reader.uint32()));
+                                        message.bigqueryResult.push($root.google.cloud.retail.v2.BigQueryOutputResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
                                         if (!(message.gcsResult && message.gcsResult.length))
                                             message.gcsResult = [];
-                                        message.gcsResult.push($root.google.cloud.retail.v2.GcsOutputResult.decode(reader, reader.uint32()));
+                                        message.gcsResult.push($root.google.cloud.retail.v2.GcsOutputResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2011,14 +2099,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        OutputResult.verify = function verify(message) {
+                        OutputResult.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.bigqueryResult != null && message.hasOwnProperty("bigqueryResult")) {
                                 if (!Array.isArray(message.bigqueryResult))
                                     return "bigqueryResult: array expected";
                                 for (var i = 0; i < message.bigqueryResult.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.BigQueryOutputResult.verify(message.bigqueryResult[i]);
+                                    var error = $root.google.cloud.retail.v2.BigQueryOutputResult.verify(message.bigqueryResult[i], long + 1);
                                     if (error)
                                         return "bigqueryResult." + error;
                                 }
@@ -2027,7 +2119,7 @@
                                 if (!Array.isArray(message.gcsResult))
                                     return "gcsResult: array expected";
                                 for (var i = 0; i < message.gcsResult.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.GcsOutputResult.verify(message.gcsResult[i]);
+                                    var error = $root.google.cloud.retail.v2.GcsOutputResult.verify(message.gcsResult[i], long + 1);
                                     if (error)
                                         return "gcsResult." + error;
                                 }
@@ -2043,9 +2135,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.OutputResult} OutputResult
                          */
-                        OutputResult.fromObject = function fromObject(object) {
+                        OutputResult.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.OutputResult)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.OutputResult();
                             if (object.bigqueryResult) {
                                 if (!Array.isArray(object.bigqueryResult))
@@ -2054,7 +2150,7 @@
                                 for (var i = 0; i < object.bigqueryResult.length; ++i) {
                                     if (typeof object.bigqueryResult[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.OutputResult.bigqueryResult: object expected");
-                                    message.bigqueryResult[i] = $root.google.cloud.retail.v2.BigQueryOutputResult.fromObject(object.bigqueryResult[i]);
+                                    message.bigqueryResult[i] = $root.google.cloud.retail.v2.BigQueryOutputResult.fromObject(object.bigqueryResult[i], long + 1);
                                 }
                             }
                             if (object.gcsResult) {
@@ -2064,7 +2160,7 @@
                                 for (var i = 0; i < object.gcsResult.length; ++i) {
                                     if (typeof object.gcsResult[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.OutputResult.gcsResult: object expected");
-                                    message.gcsResult[i] = $root.google.cloud.retail.v2.GcsOutputResult.fromObject(object.gcsResult[i]);
+                                    message.gcsResult[i] = $root.google.cloud.retail.v2.GcsOutputResult.fromObject(object.gcsResult[i], long + 1);
                                 }
                             }
                             return message;
@@ -2150,7 +2246,7 @@
                         function BigQueryOutputResult(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2225,9 +2321,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BigQueryOutputResult.decode = function decode(reader, length, error) {
+                        BigQueryOutputResult.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.BigQueryOutputResult();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2243,7 +2343,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2274,9 +2374,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BigQueryOutputResult.verify = function verify(message) {
+                        BigQueryOutputResult.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.datasetId != null && message.hasOwnProperty("datasetId"))
                                 if (!$util.isString(message.datasetId))
                                     return "datasetId: string expected";
@@ -2294,9 +2398,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.BigQueryOutputResult} BigQueryOutputResult
                          */
-                        BigQueryOutputResult.fromObject = function fromObject(object) {
+                        BigQueryOutputResult.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.BigQueryOutputResult)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.BigQueryOutputResult();
                             if (object.datasetId != null)
                                 message.datasetId = String(object.datasetId);
@@ -2378,7 +2486,7 @@
                         function GcsOutputResult(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2443,9 +2551,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GcsOutputResult.decode = function decode(reader, length, error) {
+                        GcsOutputResult.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GcsOutputResult();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2457,7 +2569,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2488,9 +2600,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GcsOutputResult.verify = function verify(message) {
+                        GcsOutputResult.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.outputUri != null && message.hasOwnProperty("outputUri"))
                                 if (!$util.isString(message.outputUri))
                                     return "outputUri: string expected";
@@ -2505,9 +2621,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GcsOutputResult} GcsOutputResult
                          */
-                        GcsOutputResult.fromObject = function fromObject(object) {
+                        GcsOutputResult.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GcsOutputResult)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GcsOutputResult();
                             if (object.outputUri != null)
                                 message.outputUri = String(object.outputUri);
@@ -2584,7 +2704,7 @@
                         function ProductLevelConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2659,9 +2779,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductLevelConfig.decode = function decode(reader, length, error) {
+                        ProductLevelConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ProductLevelConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2677,7 +2801,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2708,9 +2832,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductLevelConfig.verify = function verify(message) {
+                        ProductLevelConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.ingestionProductType != null && message.hasOwnProperty("ingestionProductType"))
                                 if (!$util.isString(message.ingestionProductType))
                                     return "ingestionProductType: string expected";
@@ -2728,9 +2856,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ProductLevelConfig} ProductLevelConfig
                          */
-                        ProductLevelConfig.fromObject = function fromObject(object) {
+                        ProductLevelConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ProductLevelConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ProductLevelConfig();
                             if (object.ingestionProductType != null)
                                 message.ingestionProductType = String(object.ingestionProductType);
@@ -2820,7 +2952,7 @@
                         function CatalogAttribute(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2965,9 +3097,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CatalogAttribute.decode = function decode(reader, length, error) {
+                        CatalogAttribute.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CatalogAttribute();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3007,11 +3143,11 @@
                                         break;
                                     }
                                 case 13: {
-                                        message.facetConfig = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.decode(reader, reader.uint32());
+                                        message.facetConfig = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3042,9 +3178,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CatalogAttribute.verify = function verify(message) {
+                        CatalogAttribute.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.key != null && message.hasOwnProperty("key"))
                                 if (!$util.isString(message.key))
                                     return "key: string expected";
@@ -3106,7 +3246,7 @@
                                     break;
                                 }
                             if (message.facetConfig != null && message.hasOwnProperty("facetConfig")) {
-                                var error = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.verify(message.facetConfig);
+                                var error = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.verify(message.facetConfig, long + 1);
                                 if (error)
                                     return "facetConfig." + error;
                             }
@@ -3121,9 +3261,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CatalogAttribute} CatalogAttribute
                          */
-                        CatalogAttribute.fromObject = function fromObject(object) {
+                        CatalogAttribute.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CatalogAttribute)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CatalogAttribute();
                             if (object.key != null)
                                 message.key = String(object.key);
@@ -3252,7 +3396,7 @@
                             if (object.facetConfig != null) {
                                 if (typeof object.facetConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.CatalogAttribute.facetConfig: object expected");
-                                message.facetConfig = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.fromObject(object.facetConfig);
+                                message.facetConfig = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.fromObject(object.facetConfig, long + 1);
                             }
                             return message;
                         };
@@ -3355,7 +3499,7 @@
                                 this.mergedFacetValues = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -3463,9 +3607,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FacetConfig.decode = function decode(reader, length, error) {
+                            FacetConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -3475,31 +3623,31 @@
                                     case 1: {
                                             if (!(message.facetIntervals && message.facetIntervals.length))
                                                 message.facetIntervals = [];
-                                            message.facetIntervals.push($root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32()));
+                                            message.facetIntervals.push($root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
                                             if (!(message.ignoredFacetValues && message.ignoredFacetValues.length))
                                                 message.ignoredFacetValues = [];
-                                            message.ignoredFacetValues.push($root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues.decode(reader, reader.uint32()));
+                                            message.ignoredFacetValues.push($root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 3: {
                                             if (!(message.mergedFacetValues && message.mergedFacetValues.length))
                                                 message.mergedFacetValues = [];
-                                            message.mergedFacetValues.push($root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacetValue.decode(reader, reader.uint32()));
+                                            message.mergedFacetValues.push($root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacetValue.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 4: {
-                                            message.mergedFacet = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacet.decode(reader, reader.uint32());
+                                            message.mergedFacet = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacet.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 5: {
-                                            message.rerankConfig = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.RerankConfig.decode(reader, reader.uint32());
+                                            message.rerankConfig = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.RerankConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -3530,14 +3678,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FacetConfig.verify = function verify(message) {
+                            FacetConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.facetIntervals != null && message.hasOwnProperty("facetIntervals")) {
                                     if (!Array.isArray(message.facetIntervals))
                                         return "facetIntervals: array expected";
                                     for (var i = 0; i < message.facetIntervals.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.Interval.verify(message.facetIntervals[i]);
+                                        var error = $root.google.cloud.retail.v2.Interval.verify(message.facetIntervals[i], long + 1);
                                         if (error)
                                             return "facetIntervals." + error;
                                     }
@@ -3546,7 +3698,7 @@
                                     if (!Array.isArray(message.ignoredFacetValues))
                                         return "ignoredFacetValues: array expected";
                                     for (var i = 0; i < message.ignoredFacetValues.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues.verify(message.ignoredFacetValues[i]);
+                                        var error = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues.verify(message.ignoredFacetValues[i], long + 1);
                                         if (error)
                                             return "ignoredFacetValues." + error;
                                     }
@@ -3555,18 +3707,18 @@
                                     if (!Array.isArray(message.mergedFacetValues))
                                         return "mergedFacetValues: array expected";
                                     for (var i = 0; i < message.mergedFacetValues.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacetValue.verify(message.mergedFacetValues[i]);
+                                        var error = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacetValue.verify(message.mergedFacetValues[i], long + 1);
                                         if (error)
                                             return "mergedFacetValues." + error;
                                     }
                                 }
                                 if (message.mergedFacet != null && message.hasOwnProperty("mergedFacet")) {
-                                    var error = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacet.verify(message.mergedFacet);
+                                    var error = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacet.verify(message.mergedFacet, long + 1);
                                     if (error)
                                         return "mergedFacet." + error;
                                 }
                                 if (message.rerankConfig != null && message.hasOwnProperty("rerankConfig")) {
-                                    var error = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.RerankConfig.verify(message.rerankConfig);
+                                    var error = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.RerankConfig.verify(message.rerankConfig, long + 1);
                                     if (error)
                                         return "rerankConfig." + error;
                                 }
@@ -3581,9 +3733,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.CatalogAttribute.FacetConfig} FacetConfig
                              */
-                            FacetConfig.fromObject = function fromObject(object) {
+                            FacetConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig();
                                 if (object.facetIntervals) {
                                     if (!Array.isArray(object.facetIntervals))
@@ -3592,7 +3748,7 @@
                                     for (var i = 0; i < object.facetIntervals.length; ++i) {
                                         if (typeof object.facetIntervals[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.CatalogAttribute.FacetConfig.facetIntervals: object expected");
-                                        message.facetIntervals[i] = $root.google.cloud.retail.v2.Interval.fromObject(object.facetIntervals[i]);
+                                        message.facetIntervals[i] = $root.google.cloud.retail.v2.Interval.fromObject(object.facetIntervals[i], long + 1);
                                     }
                                 }
                                 if (object.ignoredFacetValues) {
@@ -3602,7 +3758,7 @@
                                     for (var i = 0; i < object.ignoredFacetValues.length; ++i) {
                                         if (typeof object.ignoredFacetValues[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.CatalogAttribute.FacetConfig.ignoredFacetValues: object expected");
-                                        message.ignoredFacetValues[i] = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues.fromObject(object.ignoredFacetValues[i]);
+                                        message.ignoredFacetValues[i] = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues.fromObject(object.ignoredFacetValues[i], long + 1);
                                     }
                                 }
                                 if (object.mergedFacetValues) {
@@ -3612,18 +3768,18 @@
                                     for (var i = 0; i < object.mergedFacetValues.length; ++i) {
                                         if (typeof object.mergedFacetValues[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.CatalogAttribute.FacetConfig.mergedFacetValues: object expected");
-                                        message.mergedFacetValues[i] = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacetValue.fromObject(object.mergedFacetValues[i]);
+                                        message.mergedFacetValues[i] = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacetValue.fromObject(object.mergedFacetValues[i], long + 1);
                                     }
                                 }
                                 if (object.mergedFacet != null) {
                                     if (typeof object.mergedFacet !== "object")
                                         throw TypeError(".google.cloud.retail.v2.CatalogAttribute.FacetConfig.mergedFacet: object expected");
-                                    message.mergedFacet = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacet.fromObject(object.mergedFacet);
+                                    message.mergedFacet = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacet.fromObject(object.mergedFacet, long + 1);
                                 }
                                 if (object.rerankConfig != null) {
                                     if (typeof object.rerankConfig !== "object")
                                         throw TypeError(".google.cloud.retail.v2.CatalogAttribute.FacetConfig.rerankConfig: object expected");
-                                    message.rerankConfig = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.RerankConfig.fromObject(object.rerankConfig);
+                                    message.rerankConfig = $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.RerankConfig.fromObject(object.rerankConfig, long + 1);
                                 }
                                 return message;
                             };
@@ -3721,7 +3877,7 @@
                                     this.values = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -3807,9 +3963,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                IgnoredFacetValues.decode = function decode(reader, length, error) {
+                                IgnoredFacetValues.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -3823,15 +3983,15 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                                message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         case 3: {
-                                                message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                                message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -3862,9 +4022,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                IgnoredFacetValues.verify = function verify(message) {
+                                IgnoredFacetValues.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.values != null && message.hasOwnProperty("values")) {
                                         if (!Array.isArray(message.values))
                                             return "values: array expected";
@@ -3873,12 +4037,12 @@
                                                 return "values: string[] expected";
                                     }
                                     if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                        var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                        var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                         if (error)
                                             return "startTime." + error;
                                     }
                                     if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                        var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                        var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                         if (error)
                                             return "endTime." + error;
                                     }
@@ -3893,9 +4057,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues} IgnoredFacetValues
                                  */
-                                IgnoredFacetValues.fromObject = function fromObject(object) {
+                                IgnoredFacetValues.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues();
                                     if (object.values) {
                                         if (!Array.isArray(object.values))
@@ -3907,12 +4075,12 @@
                                     if (object.startTime != null) {
                                         if (typeof object.startTime !== "object")
                                             throw TypeError(".google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues.startTime: object expected");
-                                        message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                        message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                                     }
                                     if (object.endTime != null) {
                                         if (typeof object.endTime !== "object")
                                             throw TypeError(".google.cloud.retail.v2.CatalogAttribute.FacetConfig.IgnoredFacetValues.endTime: object expected");
-                                        message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                        message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                                     }
                                     return message;
                                 };
@@ -3999,7 +4167,7 @@
                                     this.values = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -4075,9 +4243,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                MergedFacetValue.decode = function decode(reader, length, error) {
+                                MergedFacetValue.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacetValue();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -4095,7 +4267,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -4126,9 +4298,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                MergedFacetValue.verify = function verify(message) {
+                                MergedFacetValue.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.values != null && message.hasOwnProperty("values")) {
                                         if (!Array.isArray(message.values))
                                             return "values: array expected";
@@ -4150,9 +4326,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacetValue} MergedFacetValue
                                  */
-                                MergedFacetValue.fromObject = function fromObject(object) {
+                                MergedFacetValue.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacetValue)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacetValue();
                                     if (object.values) {
                                         if (!Array.isArray(object.values))
@@ -4242,7 +4422,7 @@
                                 function MergedFacet(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -4307,9 +4487,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                MergedFacet.decode = function decode(reader, length, error) {
+                                MergedFacet.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacet();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -4321,7 +4505,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -4352,9 +4536,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                MergedFacet.verify = function verify(message) {
+                                MergedFacet.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.mergedFacetKey != null && message.hasOwnProperty("mergedFacetKey"))
                                         if (!$util.isString(message.mergedFacetKey))
                                             return "mergedFacetKey: string expected";
@@ -4369,9 +4557,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacet} MergedFacet
                                  */
-                                MergedFacet.fromObject = function fromObject(object) {
+                                MergedFacet.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacet)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.MergedFacet();
                                     if (object.mergedFacetKey != null)
                                         message.mergedFacetKey = String(object.mergedFacetKey);
@@ -4449,7 +4641,7 @@
                                     this.facetValues = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -4525,9 +4717,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                RerankConfig.decode = function decode(reader, length, error) {
+                                RerankConfig.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.RerankConfig();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -4545,7 +4741,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -4576,9 +4772,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                RerankConfig.verify = function verify(message) {
+                                RerankConfig.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.rerankFacet != null && message.hasOwnProperty("rerankFacet"))
                                         if (typeof message.rerankFacet !== "boolean")
                                             return "rerankFacet: boolean expected";
@@ -4600,9 +4800,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.CatalogAttribute.FacetConfig.RerankConfig} RerankConfig
                                  */
-                                RerankConfig.fromObject = function fromObject(object) {
+                                RerankConfig.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.RerankConfig)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.CatalogAttribute.FacetConfig.RerankConfig();
                                     if (object.rerankFacet != null)
                                         message.rerankFacet = Boolean(object.rerankFacet);
@@ -4797,7 +5001,7 @@
                             this.catalogAttributes = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4885,9 +5089,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AttributesConfig.decode = function decode(reader, length, error) {
+                        AttributesConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.AttributesConfig(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -4911,13 +5119,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2.CatalogAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2.CatalogAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.catalogAttributes, key);
                                         message.catalogAttributes[key] = value;
                                         break;
                                     }
@@ -4926,7 +5136,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -4957,9 +5167,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AttributesConfig.verify = function verify(message) {
+                        AttributesConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -4968,7 +5182,7 @@
                                     return "catalogAttributes: object expected";
                                 var key = Object.keys(message.catalogAttributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.CatalogAttribute.verify(message.catalogAttributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2.CatalogAttribute.verify(message.catalogAttributes[key[i]], long + 1);
                                     if (error)
                                         return "catalogAttributes." + error;
                                 }
@@ -4993,9 +5207,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.AttributesConfig} AttributesConfig
                          */
-                        AttributesConfig.fromObject = function fromObject(object) {
+                        AttributesConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.AttributesConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.AttributesConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -5004,9 +5222,11 @@
                                     throw TypeError(".google.cloud.retail.v2.AttributesConfig.catalogAttributes: object expected");
                                 message.catalogAttributes = {};
                                 for (var keys = Object.keys(object.catalogAttributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.catalogAttributes, keys[i]);
                                     if (typeof object.catalogAttributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.AttributesConfig.catalogAttributes: object expected");
-                                    message.catalogAttributes[keys[i]] = $root.google.cloud.retail.v2.CatalogAttribute.fromObject(object.catalogAttributes[keys[i]]);
+                                    message.catalogAttributes[keys[i]] = $root.google.cloud.retail.v2.CatalogAttribute.fromObject(object.catalogAttributes[keys[i]], long + 1);
                                 }
                             }
                             switch (object.attributeConfigLevel) {
@@ -5056,8 +5276,11 @@
                             var keys2;
                             if (message.catalogAttributes && (keys2 = Object.keys(message.catalogAttributes)).length) {
                                 object.catalogAttributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.catalogAttributes, keys2[j]);
                                     object.catalogAttributes[keys2[j]] = $root.google.cloud.retail.v2.CatalogAttribute.toObject(message.catalogAttributes[keys2[j]], options);
+                                }
                             }
                             if (message.attributeConfigLevel != null && message.hasOwnProperty("attributeConfigLevel"))
                                 object.attributeConfigLevel = options.enums === String ? $root.google.cloud.retail.v2.AttributeConfigLevel[message.attributeConfigLevel] === undefined ? message.attributeConfigLevel : $root.google.cloud.retail.v2.AttributeConfigLevel[message.attributeConfigLevel] : message.attributeConfigLevel;
@@ -5123,7 +5346,7 @@
                         function CompletionConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5288,9 +5511,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompletionConfig.decode = function decode(reader, length, error) {
+                        CompletionConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CompletionConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5318,7 +5545,7 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.suggestionsInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.suggestionsInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
@@ -5326,7 +5553,7 @@
                                         break;
                                     }
                                 case 7: {
-                                        message.denylistInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.denylistInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
@@ -5334,7 +5561,7 @@
                                         break;
                                     }
                                 case 9: {
-                                        message.allowlistInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.allowlistInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -5342,7 +5569,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5373,9 +5600,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompletionConfig.verify = function verify(message) {
+                        CompletionConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -5392,7 +5623,7 @@
                                 if (typeof message.autoLearning !== "boolean")
                                     return "autoLearning: boolean expected";
                             if (message.suggestionsInputConfig != null && message.hasOwnProperty("suggestionsInputConfig")) {
-                                var error = $root.google.cloud.retail.v2.CompletionDataInputConfig.verify(message.suggestionsInputConfig);
+                                var error = $root.google.cloud.retail.v2.CompletionDataInputConfig.verify(message.suggestionsInputConfig, long + 1);
                                 if (error)
                                     return "suggestionsInputConfig." + error;
                             }
@@ -5400,7 +5631,7 @@
                                 if (!$util.isString(message.lastSuggestionsImportOperation))
                                     return "lastSuggestionsImportOperation: string expected";
                             if (message.denylistInputConfig != null && message.hasOwnProperty("denylistInputConfig")) {
-                                var error = $root.google.cloud.retail.v2.CompletionDataInputConfig.verify(message.denylistInputConfig);
+                                var error = $root.google.cloud.retail.v2.CompletionDataInputConfig.verify(message.denylistInputConfig, long + 1);
                                 if (error)
                                     return "denylistInputConfig." + error;
                             }
@@ -5408,7 +5639,7 @@
                                 if (!$util.isString(message.lastDenylistImportOperation))
                                     return "lastDenylistImportOperation: string expected";
                             if (message.allowlistInputConfig != null && message.hasOwnProperty("allowlistInputConfig")) {
-                                var error = $root.google.cloud.retail.v2.CompletionDataInputConfig.verify(message.allowlistInputConfig);
+                                var error = $root.google.cloud.retail.v2.CompletionDataInputConfig.verify(message.allowlistInputConfig, long + 1);
                                 if (error)
                                     return "allowlistInputConfig." + error;
                             }
@@ -5426,9 +5657,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CompletionConfig} CompletionConfig
                          */
-                        CompletionConfig.fromObject = function fromObject(object) {
+                        CompletionConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CompletionConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CompletionConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -5443,21 +5678,21 @@
                             if (object.suggestionsInputConfig != null) {
                                 if (typeof object.suggestionsInputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.CompletionConfig.suggestionsInputConfig: object expected");
-                                message.suggestionsInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.fromObject(object.suggestionsInputConfig);
+                                message.suggestionsInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.fromObject(object.suggestionsInputConfig, long + 1);
                             }
                             if (object.lastSuggestionsImportOperation != null)
                                 message.lastSuggestionsImportOperation = String(object.lastSuggestionsImportOperation);
                             if (object.denylistInputConfig != null) {
                                 if (typeof object.denylistInputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.CompletionConfig.denylistInputConfig: object expected");
-                                message.denylistInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.fromObject(object.denylistInputConfig);
+                                message.denylistInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.fromObject(object.denylistInputConfig, long + 1);
                             }
                             if (object.lastDenylistImportOperation != null)
                                 message.lastDenylistImportOperation = String(object.lastDenylistImportOperation);
                             if (object.allowlistInputConfig != null) {
                                 if (typeof object.allowlistInputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.CompletionConfig.allowlistInputConfig: object expected");
-                                message.allowlistInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.fromObject(object.allowlistInputConfig);
+                                message.allowlistInputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.fromObject(object.allowlistInputConfig, long + 1);
                             }
                             if (object.lastAllowlistImportOperation != null)
                                 message.lastAllowlistImportOperation = String(object.lastAllowlistImportOperation);
@@ -5566,7 +5801,7 @@
                         function Catalog(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5651,9 +5886,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Catalog.decode = function decode(reader, length, error) {
+                        Catalog.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Catalog();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5669,11 +5908,11 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.productLevelConfig = $root.google.cloud.retail.v2.ProductLevelConfig.decode(reader, reader.uint32());
+                                        message.productLevelConfig = $root.google.cloud.retail.v2.ProductLevelConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5704,9 +5943,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Catalog.verify = function verify(message) {
+                        Catalog.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -5714,7 +5957,7 @@
                                 if (!$util.isString(message.displayName))
                                     return "displayName: string expected";
                             if (message.productLevelConfig != null && message.hasOwnProperty("productLevelConfig")) {
-                                var error = $root.google.cloud.retail.v2.ProductLevelConfig.verify(message.productLevelConfig);
+                                var error = $root.google.cloud.retail.v2.ProductLevelConfig.verify(message.productLevelConfig, long + 1);
                                 if (error)
                                     return "productLevelConfig." + error;
                             }
@@ -5729,9 +5972,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Catalog} Catalog
                          */
-                        Catalog.fromObject = function fromObject(object) {
+                        Catalog.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Catalog)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Catalog();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -5740,7 +5987,7 @@
                             if (object.productLevelConfig != null) {
                                 if (typeof object.productLevelConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Catalog.productLevelConfig: object expected");
-                                message.productLevelConfig = $root.google.cloud.retail.v2.ProductLevelConfig.fromObject(object.productLevelConfig);
+                                message.productLevelConfig = $root.google.cloud.retail.v2.ProductLevelConfig.fromObject(object.productLevelConfig, long + 1);
                             }
                             return message;
                         };
@@ -5890,7 +6137,7 @@
                             this.pageCategories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5978,9 +6225,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Condition.decode = function decode(reader, length, error) {
+                        Condition.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Condition();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5990,13 +6241,13 @@
                                 case 1: {
                                         if (!(message.queryTerms && message.queryTerms.length))
                                             message.queryTerms = [];
-                                        message.queryTerms.push($root.google.cloud.retail.v2.Condition.QueryTerm.decode(reader, reader.uint32()));
+                                        message.queryTerms.push($root.google.cloud.retail.v2.Condition.QueryTerm.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 3: {
                                         if (!(message.activeTimeRange && message.activeTimeRange.length))
                                             message.activeTimeRange = [];
-                                        message.activeTimeRange.push($root.google.cloud.retail.v2.Condition.TimeRange.decode(reader, reader.uint32()));
+                                        message.activeTimeRange.push($root.google.cloud.retail.v2.Condition.TimeRange.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 4: {
@@ -6006,7 +6257,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6037,14 +6288,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Condition.verify = function verify(message) {
+                        Condition.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                 if (!Array.isArray(message.queryTerms))
                                     return "queryTerms: array expected";
                                 for (var i = 0; i < message.queryTerms.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Condition.QueryTerm.verify(message.queryTerms[i]);
+                                    var error = $root.google.cloud.retail.v2.Condition.QueryTerm.verify(message.queryTerms[i], long + 1);
                                     if (error)
                                         return "queryTerms." + error;
                                 }
@@ -6053,7 +6308,7 @@
                                 if (!Array.isArray(message.activeTimeRange))
                                     return "activeTimeRange: array expected";
                                 for (var i = 0; i < message.activeTimeRange.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Condition.TimeRange.verify(message.activeTimeRange[i]);
+                                    var error = $root.google.cloud.retail.v2.Condition.TimeRange.verify(message.activeTimeRange[i], long + 1);
                                     if (error)
                                         return "activeTimeRange." + error;
                                 }
@@ -6076,9 +6331,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Condition} Condition
                          */
-                        Condition.fromObject = function fromObject(object) {
+                        Condition.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Condition)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Condition();
                             if (object.queryTerms) {
                                 if (!Array.isArray(object.queryTerms))
@@ -6087,7 +6346,7 @@
                                 for (var i = 0; i < object.queryTerms.length; ++i) {
                                     if (typeof object.queryTerms[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Condition.queryTerms: object expected");
-                                    message.queryTerms[i] = $root.google.cloud.retail.v2.Condition.QueryTerm.fromObject(object.queryTerms[i]);
+                                    message.queryTerms[i] = $root.google.cloud.retail.v2.Condition.QueryTerm.fromObject(object.queryTerms[i], long + 1);
                                 }
                             }
                             if (object.activeTimeRange) {
@@ -6097,7 +6356,7 @@
                                 for (var i = 0; i < object.activeTimeRange.length; ++i) {
                                     if (typeof object.activeTimeRange[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Condition.activeTimeRange: object expected");
-                                    message.activeTimeRange[i] = $root.google.cloud.retail.v2.Condition.TimeRange.fromObject(object.activeTimeRange[i]);
+                                    message.activeTimeRange[i] = $root.google.cloud.retail.v2.Condition.TimeRange.fromObject(object.activeTimeRange[i], long + 1);
                                 }
                             }
                             if (object.pageCategories) {
@@ -6193,7 +6452,7 @@
                             function QueryTerm(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -6268,9 +6527,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            QueryTerm.decode = function decode(reader, length, error) {
+                            QueryTerm.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Condition.QueryTerm();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -6286,7 +6549,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -6317,9 +6580,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            QueryTerm.verify = function verify(message) {
+                            QueryTerm.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.value != null && message.hasOwnProperty("value"))
                                     if (!$util.isString(message.value))
                                         return "value: string expected";
@@ -6337,9 +6604,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Condition.QueryTerm} QueryTerm
                              */
-                            QueryTerm.fromObject = function fromObject(object) {
+                            QueryTerm.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Condition.QueryTerm)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Condition.QueryTerm();
                                 if (object.value != null)
                                     message.value = String(object.value);
@@ -6422,7 +6693,7 @@
                             function TimeRange(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -6497,9 +6768,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TimeRange.decode = function decode(reader, length, error) {
+                            TimeRange.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Condition.TimeRange();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -6507,15 +6782,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -6546,16 +6821,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TimeRange.verify = function verify(message) {
+                            TimeRange.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                     if (error)
                                         return "startTime." + error;
                                 }
                                 if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                     if (error)
                                         return "endTime." + error;
                                 }
@@ -6570,19 +6849,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Condition.TimeRange} TimeRange
                              */
-                            TimeRange.fromObject = function fromObject(object) {
+                            TimeRange.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Condition.TimeRange)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Condition.TimeRange();
                                 if (object.startTime != null) {
                                     if (typeof object.startTime !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Condition.TimeRange.startTime: object expected");
-                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                                 }
                                 if (object.endTime != null) {
                                     if (typeof object.endTime !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Condition.TimeRange.endTime: object expected");
-                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                                 }
                                 return message;
                             };
@@ -6674,7 +6957,7 @@
                         function Rule(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -6863,9 +7146,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Rule.decode = function decode(reader, length, error) {
+                        Rule.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -6873,55 +7160,55 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.boostAction = $root.google.cloud.retail.v2.Rule.BoostAction.decode(reader, reader.uint32());
+                                        message.boostAction = $root.google.cloud.retail.v2.Rule.BoostAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.redirectAction = $root.google.cloud.retail.v2.Rule.RedirectAction.decode(reader, reader.uint32());
+                                        message.redirectAction = $root.google.cloud.retail.v2.Rule.RedirectAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.onewaySynonymsAction = $root.google.cloud.retail.v2.Rule.OnewaySynonymsAction.decode(reader, reader.uint32());
+                                        message.onewaySynonymsAction = $root.google.cloud.retail.v2.Rule.OnewaySynonymsAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.doNotAssociateAction = $root.google.cloud.retail.v2.Rule.DoNotAssociateAction.decode(reader, reader.uint32());
+                                        message.doNotAssociateAction = $root.google.cloud.retail.v2.Rule.DoNotAssociateAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.replacementAction = $root.google.cloud.retail.v2.Rule.ReplacementAction.decode(reader, reader.uint32());
+                                        message.replacementAction = $root.google.cloud.retail.v2.Rule.ReplacementAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
-                                        message.ignoreAction = $root.google.cloud.retail.v2.Rule.IgnoreAction.decode(reader, reader.uint32());
+                                        message.ignoreAction = $root.google.cloud.retail.v2.Rule.IgnoreAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
-                                        message.filterAction = $root.google.cloud.retail.v2.Rule.FilterAction.decode(reader, reader.uint32());
+                                        message.filterAction = $root.google.cloud.retail.v2.Rule.FilterAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 11: {
-                                        message.twowaySynonymsAction = $root.google.cloud.retail.v2.Rule.TwowaySynonymsAction.decode(reader, reader.uint32());
+                                        message.twowaySynonymsAction = $root.google.cloud.retail.v2.Rule.TwowaySynonymsAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 12: {
-                                        message.forceReturnFacetAction = $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.decode(reader, reader.uint32());
+                                        message.forceReturnFacetAction = $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
-                                        message.removeFacetAction = $root.google.cloud.retail.v2.Rule.RemoveFacetAction.decode(reader, reader.uint32());
+                                        message.removeFacetAction = $root.google.cloud.retail.v2.Rule.RemoveFacetAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
-                                        message.pinAction = $root.google.cloud.retail.v2.Rule.PinAction.decode(reader, reader.uint32());
+                                        message.pinAction = $root.google.cloud.retail.v2.Rule.PinAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
-                                        message.condition = $root.google.cloud.retail.v2.Condition.decode(reader, reader.uint32());
+                                        message.condition = $root.google.cloud.retail.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6952,14 +7239,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Rule.verify = function verify(message) {
+                        Rule.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.boostAction != null && message.hasOwnProperty("boostAction")) {
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.BoostAction.verify(message.boostAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.BoostAction.verify(message.boostAction, long + 1);
                                     if (error)
                                         return "boostAction." + error;
                                 }
@@ -6969,7 +7260,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.RedirectAction.verify(message.redirectAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.RedirectAction.verify(message.redirectAction, long + 1);
                                     if (error)
                                         return "redirectAction." + error;
                                 }
@@ -6979,7 +7270,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.OnewaySynonymsAction.verify(message.onewaySynonymsAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.OnewaySynonymsAction.verify(message.onewaySynonymsAction, long + 1);
                                     if (error)
                                         return "onewaySynonymsAction." + error;
                                 }
@@ -6989,7 +7280,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.DoNotAssociateAction.verify(message.doNotAssociateAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.DoNotAssociateAction.verify(message.doNotAssociateAction, long + 1);
                                     if (error)
                                         return "doNotAssociateAction." + error;
                                 }
@@ -6999,7 +7290,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.ReplacementAction.verify(message.replacementAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.ReplacementAction.verify(message.replacementAction, long + 1);
                                     if (error)
                                         return "replacementAction." + error;
                                 }
@@ -7009,7 +7300,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.IgnoreAction.verify(message.ignoreAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.IgnoreAction.verify(message.ignoreAction, long + 1);
                                     if (error)
                                         return "ignoreAction." + error;
                                 }
@@ -7019,7 +7310,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.FilterAction.verify(message.filterAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.FilterAction.verify(message.filterAction, long + 1);
                                     if (error)
                                         return "filterAction." + error;
                                 }
@@ -7029,7 +7320,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.TwowaySynonymsAction.verify(message.twowaySynonymsAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.TwowaySynonymsAction.verify(message.twowaySynonymsAction, long + 1);
                                     if (error)
                                         return "twowaySynonymsAction." + error;
                                 }
@@ -7039,7 +7330,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.verify(message.forceReturnFacetAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.verify(message.forceReturnFacetAction, long + 1);
                                     if (error)
                                         return "forceReturnFacetAction." + error;
                                 }
@@ -7049,7 +7340,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.RemoveFacetAction.verify(message.removeFacetAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.RemoveFacetAction.verify(message.removeFacetAction, long + 1);
                                     if (error)
                                         return "removeFacetAction." + error;
                                 }
@@ -7059,13 +7350,13 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.PinAction.verify(message.pinAction);
+                                    var error = $root.google.cloud.retail.v2.Rule.PinAction.verify(message.pinAction, long + 1);
                                     if (error)
                                         return "pinAction." + error;
                                 }
                             }
                             if (message.condition != null && message.hasOwnProperty("condition")) {
-                                var error = $root.google.cloud.retail.v2.Condition.verify(message.condition);
+                                var error = $root.google.cloud.retail.v2.Condition.verify(message.condition, long + 1);
                                 if (error)
                                     return "condition." + error;
                             }
@@ -7080,69 +7371,73 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Rule} Rule
                          */
-                        Rule.fromObject = function fromObject(object) {
+                        Rule.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Rule)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Rule();
                             if (object.boostAction != null) {
                                 if (typeof object.boostAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.boostAction: object expected");
-                                message.boostAction = $root.google.cloud.retail.v2.Rule.BoostAction.fromObject(object.boostAction);
+                                message.boostAction = $root.google.cloud.retail.v2.Rule.BoostAction.fromObject(object.boostAction, long + 1);
                             }
                             if (object.redirectAction != null) {
                                 if (typeof object.redirectAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.redirectAction: object expected");
-                                message.redirectAction = $root.google.cloud.retail.v2.Rule.RedirectAction.fromObject(object.redirectAction);
+                                message.redirectAction = $root.google.cloud.retail.v2.Rule.RedirectAction.fromObject(object.redirectAction, long + 1);
                             }
                             if (object.onewaySynonymsAction != null) {
                                 if (typeof object.onewaySynonymsAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.onewaySynonymsAction: object expected");
-                                message.onewaySynonymsAction = $root.google.cloud.retail.v2.Rule.OnewaySynonymsAction.fromObject(object.onewaySynonymsAction);
+                                message.onewaySynonymsAction = $root.google.cloud.retail.v2.Rule.OnewaySynonymsAction.fromObject(object.onewaySynonymsAction, long + 1);
                             }
                             if (object.doNotAssociateAction != null) {
                                 if (typeof object.doNotAssociateAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.doNotAssociateAction: object expected");
-                                message.doNotAssociateAction = $root.google.cloud.retail.v2.Rule.DoNotAssociateAction.fromObject(object.doNotAssociateAction);
+                                message.doNotAssociateAction = $root.google.cloud.retail.v2.Rule.DoNotAssociateAction.fromObject(object.doNotAssociateAction, long + 1);
                             }
                             if (object.replacementAction != null) {
                                 if (typeof object.replacementAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.replacementAction: object expected");
-                                message.replacementAction = $root.google.cloud.retail.v2.Rule.ReplacementAction.fromObject(object.replacementAction);
+                                message.replacementAction = $root.google.cloud.retail.v2.Rule.ReplacementAction.fromObject(object.replacementAction, long + 1);
                             }
                             if (object.ignoreAction != null) {
                                 if (typeof object.ignoreAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.ignoreAction: object expected");
-                                message.ignoreAction = $root.google.cloud.retail.v2.Rule.IgnoreAction.fromObject(object.ignoreAction);
+                                message.ignoreAction = $root.google.cloud.retail.v2.Rule.IgnoreAction.fromObject(object.ignoreAction, long + 1);
                             }
                             if (object.filterAction != null) {
                                 if (typeof object.filterAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.filterAction: object expected");
-                                message.filterAction = $root.google.cloud.retail.v2.Rule.FilterAction.fromObject(object.filterAction);
+                                message.filterAction = $root.google.cloud.retail.v2.Rule.FilterAction.fromObject(object.filterAction, long + 1);
                             }
                             if (object.twowaySynonymsAction != null) {
                                 if (typeof object.twowaySynonymsAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.twowaySynonymsAction: object expected");
-                                message.twowaySynonymsAction = $root.google.cloud.retail.v2.Rule.TwowaySynonymsAction.fromObject(object.twowaySynonymsAction);
+                                message.twowaySynonymsAction = $root.google.cloud.retail.v2.Rule.TwowaySynonymsAction.fromObject(object.twowaySynonymsAction, long + 1);
                             }
                             if (object.forceReturnFacetAction != null) {
                                 if (typeof object.forceReturnFacetAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.forceReturnFacetAction: object expected");
-                                message.forceReturnFacetAction = $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.fromObject(object.forceReturnFacetAction);
+                                message.forceReturnFacetAction = $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.fromObject(object.forceReturnFacetAction, long + 1);
                             }
                             if (object.removeFacetAction != null) {
                                 if (typeof object.removeFacetAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.removeFacetAction: object expected");
-                                message.removeFacetAction = $root.google.cloud.retail.v2.Rule.RemoveFacetAction.fromObject(object.removeFacetAction);
+                                message.removeFacetAction = $root.google.cloud.retail.v2.Rule.RemoveFacetAction.fromObject(object.removeFacetAction, long + 1);
                             }
                             if (object.pinAction != null) {
                                 if (typeof object.pinAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.pinAction: object expected");
-                                message.pinAction = $root.google.cloud.retail.v2.Rule.PinAction.fromObject(object.pinAction);
+                                message.pinAction = $root.google.cloud.retail.v2.Rule.PinAction.fromObject(object.pinAction, long + 1);
                             }
                             if (object.condition != null) {
                                 if (typeof object.condition !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Rule.condition: object expected");
-                                message.condition = $root.google.cloud.retail.v2.Condition.fromObject(object.condition);
+                                message.condition = $root.google.cloud.retail.v2.Condition.fromObject(object.condition, long + 1);
                             }
                             return message;
                         };
@@ -7269,7 +7564,7 @@
                             function BoostAction(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -7344,9 +7639,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BoostAction.decode = function decode(reader, length, error) {
+                            BoostAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.BoostAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -7362,7 +7661,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -7393,9 +7692,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BoostAction.verify = function verify(message) {
+                            BoostAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.boost != null && message.hasOwnProperty("boost"))
                                     if (typeof message.boost !== "number")
                                         return "boost: number expected";
@@ -7413,9 +7716,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.BoostAction} BoostAction
                              */
-                            BoostAction.fromObject = function fromObject(object) {
+                            BoostAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.BoostAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.BoostAction();
                                 if (object.boost != null)
                                     message.boost = Number(object.boost);
@@ -7497,7 +7804,7 @@
                             function FilterAction(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -7562,9 +7869,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FilterAction.decode = function decode(reader, length, error) {
+                            FilterAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.FilterAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -7576,7 +7887,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -7607,9 +7918,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FilterAction.verify = function verify(message) {
+                            FilterAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.filter != null && message.hasOwnProperty("filter"))
                                     if (!$util.isString(message.filter))
                                         return "filter: string expected";
@@ -7624,9 +7939,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.FilterAction} FilterAction
                              */
-                            FilterAction.fromObject = function fromObject(object) {
+                            FilterAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.FilterAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.FilterAction();
                                 if (object.filter != null)
                                     message.filter = String(object.filter);
@@ -7702,7 +8021,7 @@
                             function RedirectAction(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -7767,9 +8086,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RedirectAction.decode = function decode(reader, length, error) {
+                            RedirectAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.RedirectAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -7781,7 +8104,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -7812,9 +8135,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RedirectAction.verify = function verify(message) {
+                            RedirectAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.redirectUri != null && message.hasOwnProperty("redirectUri"))
                                     if (!$util.isString(message.redirectUri))
                                         return "redirectUri: string expected";
@@ -7829,9 +8156,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.RedirectAction} RedirectAction
                              */
-                            RedirectAction.fromObject = function fromObject(object) {
+                            RedirectAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.RedirectAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.RedirectAction();
                                 if (object.redirectUri != null)
                                     message.redirectUri = String(object.redirectUri);
@@ -7908,7 +8239,7 @@
                                 this.synonyms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -7974,9 +8305,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TwowaySynonymsAction.decode = function decode(reader, length, error) {
+                            TwowaySynonymsAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.TwowaySynonymsAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -7990,7 +8325,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -8021,9 +8356,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TwowaySynonymsAction.verify = function verify(message) {
+                            TwowaySynonymsAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.synonyms != null && message.hasOwnProperty("synonyms")) {
                                     if (!Array.isArray(message.synonyms))
                                         return "synonyms: array expected";
@@ -8042,9 +8381,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.TwowaySynonymsAction} TwowaySynonymsAction
                              */
-                            TwowaySynonymsAction.fromObject = function fromObject(object) {
+                            TwowaySynonymsAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.TwowaySynonymsAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.TwowaySynonymsAction();
                                 if (object.synonyms) {
                                     if (!Array.isArray(object.synonyms))
@@ -8133,7 +8476,7 @@
                                 this.onewayTerms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -8221,9 +8564,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            OnewaySynonymsAction.decode = function decode(reader, length, error) {
+                            OnewaySynonymsAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.OnewaySynonymsAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -8249,7 +8596,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -8280,9 +8627,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            OnewaySynonymsAction.verify = function verify(message) {
+                            OnewaySynonymsAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                     if (!Array.isArray(message.queryTerms))
                                         return "queryTerms: array expected";
@@ -8315,9 +8666,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.OnewaySynonymsAction} OnewaySynonymsAction
                              */
-                            OnewaySynonymsAction.fromObject = function fromObject(object) {
+                            OnewaySynonymsAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.OnewaySynonymsAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.OnewaySynonymsAction();
                                 if (object.queryTerms) {
                                     if (!Array.isArray(object.queryTerms))
@@ -8433,7 +8788,7 @@
                                 this.terms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -8521,9 +8876,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DoNotAssociateAction.decode = function decode(reader, length, error) {
+                            DoNotAssociateAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.DoNotAssociateAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -8549,7 +8908,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -8580,9 +8939,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DoNotAssociateAction.verify = function verify(message) {
+                            DoNotAssociateAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                     if (!Array.isArray(message.queryTerms))
                                         return "queryTerms: array expected";
@@ -8615,9 +8978,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.DoNotAssociateAction} DoNotAssociateAction
                              */
-                            DoNotAssociateAction.fromObject = function fromObject(object) {
+                            DoNotAssociateAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.DoNotAssociateAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.DoNotAssociateAction();
                                 if (object.queryTerms) {
                                     if (!Array.isArray(object.queryTerms))
@@ -8731,7 +9098,7 @@
                                 this.queryTerms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -8817,9 +9184,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ReplacementAction.decode = function decode(reader, length, error) {
+                            ReplacementAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.ReplacementAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -8841,7 +9212,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -8872,9 +9243,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ReplacementAction.verify = function verify(message) {
+                            ReplacementAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                     if (!Array.isArray(message.queryTerms))
                                         return "queryTerms: array expected";
@@ -8899,9 +9274,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.ReplacementAction} ReplacementAction
                              */
-                            ReplacementAction.fromObject = function fromObject(object) {
+                            ReplacementAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.ReplacementAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.ReplacementAction();
                                 if (object.queryTerms) {
                                     if (!Array.isArray(object.queryTerms))
@@ -8998,7 +9377,7 @@
                                 this.ignoreTerms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -9064,9 +9443,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            IgnoreAction.decode = function decode(reader, length, error) {
+                            IgnoreAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.IgnoreAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -9080,7 +9463,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -9111,9 +9494,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            IgnoreAction.verify = function verify(message) {
+                            IgnoreAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.ignoreTerms != null && message.hasOwnProperty("ignoreTerms")) {
                                     if (!Array.isArray(message.ignoreTerms))
                                         return "ignoreTerms: array expected";
@@ -9132,9 +9519,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.IgnoreAction} IgnoreAction
                              */
-                            IgnoreAction.fromObject = function fromObject(object) {
+                            IgnoreAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.IgnoreAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.IgnoreAction();
                                 if (object.ignoreTerms) {
                                     if (!Array.isArray(object.ignoreTerms))
@@ -9219,7 +9610,7 @@
                                 this.facetPositionAdjustments = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -9285,9 +9676,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ForceReturnFacetAction.decode = function decode(reader, length, error) {
+                            ForceReturnFacetAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -9297,11 +9692,11 @@
                                     case 1: {
                                             if (!(message.facetPositionAdjustments && message.facetPositionAdjustments.length))
                                                 message.facetPositionAdjustments = [];
-                                            message.facetPositionAdjustments.push($root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.FacetPositionAdjustment.decode(reader, reader.uint32()));
+                                            message.facetPositionAdjustments.push($root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.FacetPositionAdjustment.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -9332,14 +9727,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ForceReturnFacetAction.verify = function verify(message) {
+                            ForceReturnFacetAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.facetPositionAdjustments != null && message.hasOwnProperty("facetPositionAdjustments")) {
                                     if (!Array.isArray(message.facetPositionAdjustments))
                                         return "facetPositionAdjustments: array expected";
                                     for (var i = 0; i < message.facetPositionAdjustments.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.FacetPositionAdjustment.verify(message.facetPositionAdjustments[i]);
+                                        var error = $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.FacetPositionAdjustment.verify(message.facetPositionAdjustments[i], long + 1);
                                         if (error)
                                             return "facetPositionAdjustments." + error;
                                     }
@@ -9355,9 +9754,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.ForceReturnFacetAction} ForceReturnFacetAction
                              */
-                            ForceReturnFacetAction.fromObject = function fromObject(object) {
+                            ForceReturnFacetAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction();
                                 if (object.facetPositionAdjustments) {
                                     if (!Array.isArray(object.facetPositionAdjustments))
@@ -9366,7 +9769,7 @@
                                     for (var i = 0; i < object.facetPositionAdjustments.length; ++i) {
                                         if (typeof object.facetPositionAdjustments[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.Rule.ForceReturnFacetAction.facetPositionAdjustments: object expected");
-                                        message.facetPositionAdjustments[i] = $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.FacetPositionAdjustment.fromObject(object.facetPositionAdjustments[i]);
+                                        message.facetPositionAdjustments[i] = $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.FacetPositionAdjustment.fromObject(object.facetPositionAdjustments[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -9442,7 +9845,7 @@
                                 function FacetPositionAdjustment(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -9517,9 +9920,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FacetPositionAdjustment.decode = function decode(reader, length, error) {
+                                FacetPositionAdjustment.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.FacetPositionAdjustment();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -9535,7 +9942,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -9566,9 +9973,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FacetPositionAdjustment.verify = function verify(message) {
+                                FacetPositionAdjustment.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.attributeName != null && message.hasOwnProperty("attributeName"))
                                         if (!$util.isString(message.attributeName))
                                             return "attributeName: string expected";
@@ -9586,9 +9997,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.Rule.ForceReturnFacetAction.FacetPositionAdjustment} FacetPositionAdjustment
                                  */
-                                FacetPositionAdjustment.fromObject = function fromObject(object) {
+                                FacetPositionAdjustment.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.FacetPositionAdjustment)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.Rule.ForceReturnFacetAction.FacetPositionAdjustment();
                                     if (object.attributeName != null)
                                         message.attributeName = String(object.attributeName);
@@ -9674,7 +10089,7 @@
                                 this.attributeNames = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -9740,9 +10155,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RemoveFacetAction.decode = function decode(reader, length, error) {
+                            RemoveFacetAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.RemoveFacetAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -9756,7 +10175,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -9787,9 +10206,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RemoveFacetAction.verify = function verify(message) {
+                            RemoveFacetAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.attributeNames != null && message.hasOwnProperty("attributeNames")) {
                                     if (!Array.isArray(message.attributeNames))
                                         return "attributeNames: array expected";
@@ -9808,9 +10231,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.RemoveFacetAction} RemoveFacetAction
                              */
-                            RemoveFacetAction.fromObject = function fromObject(object) {
+                            RemoveFacetAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.RemoveFacetAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.RemoveFacetAction();
                                 if (object.attributeNames) {
                                     if (!Array.isArray(object.attributeNames))
@@ -9895,7 +10322,7 @@
                                 this.pinMap = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -9961,9 +10388,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PinAction.decode = function decode(reader, length, error) {
+                            PinAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rule.PinAction(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -9986,7 +10417,7 @@
                                                     value = reader.string();
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
@@ -9994,7 +10425,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -10025,9 +10456,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PinAction.verify = function verify(message) {
+                            PinAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.pinMap != null && message.hasOwnProperty("pinMap")) {
                                     if (!$util.isObject(message.pinMap))
                                         return "pinMap: object expected";
@@ -10050,16 +10485,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Rule.PinAction} PinAction
                              */
-                            PinAction.fromObject = function fromObject(object) {
+                            PinAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Rule.PinAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Rule.PinAction();
                                 if (object.pinMap) {
                                     if (typeof object.pinMap !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Rule.PinAction.pinMap: object expected");
                                     message.pinMap = {};
-                                    for (var keys = Object.keys(object.pinMap), i = 0; i < keys.length; ++i)
+                                    for (var keys = Object.keys(object.pinMap), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.pinMap, keys[i]);
                                         message.pinMap[keys[i]] = String(object.pinMap[keys[i]]);
+                                    }
                                 }
                                 return message;
                             };
@@ -10082,8 +10524,11 @@
                                 var keys2;
                                 if (message.pinMap && (keys2 = Object.keys(message.pinMap)).length) {
                                     object.pinMap = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.pinMap, keys2[j]);
                                         object.pinMap[keys2[j]] = message.pinMap[keys2[j]];
+                                    }
                                 }
                                 return object;
                             };
@@ -10143,7 +10588,7 @@
                             this.ageGroups = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10220,9 +10665,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Audience.decode = function decode(reader, length, error) {
+                        Audience.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Audience();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10242,7 +10691,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10273,9 +10722,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Audience.verify = function verify(message) {
+                        Audience.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.genders != null && message.hasOwnProperty("genders")) {
                                 if (!Array.isArray(message.genders))
                                     return "genders: array expected";
@@ -10301,9 +10754,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Audience} Audience
                          */
-                        Audience.fromObject = function fromObject(object) {
+                        Audience.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Audience)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Audience();
                             if (object.genders) {
                                 if (!Array.isArray(object.genders))
@@ -10404,7 +10861,7 @@
                             this.colors = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10481,9 +10938,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ColorInfo.decode = function decode(reader, length, error) {
+                        ColorInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ColorInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10503,7 +10964,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10534,9 +10995,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ColorInfo.verify = function verify(message) {
+                        ColorInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.colorFamilies != null && message.hasOwnProperty("colorFamilies")) {
                                 if (!Array.isArray(message.colorFamilies))
                                     return "colorFamilies: array expected";
@@ -10562,9 +11027,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ColorInfo} ColorInfo
                          */
-                        ColorInfo.fromObject = function fromObject(object) {
+                        ColorInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ColorInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ColorInfo();
                             if (object.colorFamilies) {
                                 if (!Array.isArray(object.colorFamilies))
@@ -10667,7 +11136,7 @@
                             this.numbers = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10782,9 +11251,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CustomAttribute.decode = function decode(reader, length, error) {
+                        CustomAttribute.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CustomAttribute();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10817,7 +11290,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10848,9 +11321,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CustomAttribute.verify = function verify(message) {
+                        CustomAttribute.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.text != null && message.hasOwnProperty("text")) {
                                 if (!Array.isArray(message.text))
@@ -10887,9 +11364,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CustomAttribute} CustomAttribute
                          */
-                        CustomAttribute.fromObject = function fromObject(object) {
+                        CustomAttribute.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CustomAttribute)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CustomAttribute();
                             if (object.text) {
                                 if (!Array.isArray(object.text))
@@ -11003,7 +11484,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11079,9 +11560,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        FulfillmentInfo.decode = function decode(reader, length, error) {
+                        FulfillmentInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.FulfillmentInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11099,7 +11584,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11130,9 +11615,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        FulfillmentInfo.verify = function verify(message) {
+                        FulfillmentInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.type != null && message.hasOwnProperty("type"))
                                 if (!$util.isString(message.type))
                                     return "type: string expected";
@@ -11154,9 +11643,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.FulfillmentInfo} FulfillmentInfo
                          */
-                        FulfillmentInfo.fromObject = function fromObject(object) {
+                        FulfillmentInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.FulfillmentInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.FulfillmentInfo();
                             if (object.type != null)
                                 message.type = String(object.type);
@@ -11248,7 +11741,7 @@
                         function Image(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11333,9 +11826,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Image.decode = function decode(reader, length, error) {
+                        Image.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Image();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11355,7 +11852,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11386,9 +11883,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Image.verify = function verify(message) {
+                        Image.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.uri != null && message.hasOwnProperty("uri"))
                                 if (!$util.isString(message.uri))
                                     return "uri: string expected";
@@ -11409,9 +11910,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Image} Image
                          */
-                        Image.fromObject = function fromObject(object) {
+                        Image.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Image)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Image();
                             if (object.uri != null)
                                 message.uri = String(object.uri);
@@ -11501,7 +12006,7 @@
                         function Interval(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11621,9 +12126,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Interval.decode = function decode(reader, length, error) {
+                        Interval.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Interval();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11647,7 +12156,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11678,9 +12187,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Interval.verify = function verify(message) {
+                        Interval.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.minimum != null && message.hasOwnProperty("minimum")) {
                                 properties.min = 1;
@@ -11717,9 +12230,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Interval} Interval
                          */
-                        Interval.fromObject = function fromObject(object) {
+                        Interval.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Interval)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Interval();
                             if (object.minimum != null)
                                 message.minimum = Number(object.minimum);
@@ -11823,7 +12340,7 @@
                         function PriceInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11948,9 +12465,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PriceInfo.decode = function decode(reader, length, error) {
+                        PriceInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PriceInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11974,19 +12495,19 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.priceEffectiveTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.priceEffectiveTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.priceExpireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.priceExpireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.priceRange = $root.google.cloud.retail.v2.PriceInfo.PriceRange.decode(reader, reader.uint32());
+                                        message.priceRange = $root.google.cloud.retail.v2.PriceInfo.PriceRange.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12017,9 +12538,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PriceInfo.verify = function verify(message) {
+                        PriceInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.currencyCode != null && message.hasOwnProperty("currencyCode"))
                                 if (!$util.isString(message.currencyCode))
                                     return "currencyCode: string expected";
@@ -12033,17 +12558,17 @@
                                 if (typeof message.cost !== "number")
                                     return "cost: number expected";
                             if (message.priceEffectiveTime != null && message.hasOwnProperty("priceEffectiveTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.priceEffectiveTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.priceEffectiveTime, long + 1);
                                 if (error)
                                     return "priceEffectiveTime." + error;
                             }
                             if (message.priceExpireTime != null && message.hasOwnProperty("priceExpireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.priceExpireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.priceExpireTime, long + 1);
                                 if (error)
                                     return "priceExpireTime." + error;
                             }
                             if (message.priceRange != null && message.hasOwnProperty("priceRange")) {
-                                var error = $root.google.cloud.retail.v2.PriceInfo.PriceRange.verify(message.priceRange);
+                                var error = $root.google.cloud.retail.v2.PriceInfo.PriceRange.verify(message.priceRange, long + 1);
                                 if (error)
                                     return "priceRange." + error;
                             }
@@ -12058,9 +12583,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PriceInfo} PriceInfo
                          */
-                        PriceInfo.fromObject = function fromObject(object) {
+                        PriceInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PriceInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PriceInfo();
                             if (object.currencyCode != null)
                                 message.currencyCode = String(object.currencyCode);
@@ -12073,17 +12602,17 @@
                             if (object.priceEffectiveTime != null) {
                                 if (typeof object.priceEffectiveTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.PriceInfo.priceEffectiveTime: object expected");
-                                message.priceEffectiveTime = $root.google.protobuf.Timestamp.fromObject(object.priceEffectiveTime);
+                                message.priceEffectiveTime = $root.google.protobuf.Timestamp.fromObject(object.priceEffectiveTime, long + 1);
                             }
                             if (object.priceExpireTime != null) {
                                 if (typeof object.priceExpireTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.PriceInfo.priceExpireTime: object expected");
-                                message.priceExpireTime = $root.google.protobuf.Timestamp.fromObject(object.priceExpireTime);
+                                message.priceExpireTime = $root.google.protobuf.Timestamp.fromObject(object.priceExpireTime, long + 1);
                             }
                             if (object.priceRange != null) {
                                 if (typeof object.priceRange !== "object")
                                     throw TypeError(".google.cloud.retail.v2.PriceInfo.priceRange: object expected");
-                                message.priceRange = $root.google.cloud.retail.v2.PriceInfo.PriceRange.fromObject(object.priceRange);
+                                message.priceRange = $root.google.cloud.retail.v2.PriceInfo.PriceRange.fromObject(object.priceRange, long + 1);
                             }
                             return message;
                         };
@@ -12174,7 +12703,7 @@
                             function PriceRange(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -12249,9 +12778,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PriceRange.decode = function decode(reader, length, error) {
+                            PriceRange.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PriceInfo.PriceRange();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -12259,15 +12792,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.price = $root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32());
+                                            message.price = $root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.originalPrice = $root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32());
+                                            message.originalPrice = $root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -12298,16 +12831,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PriceRange.verify = function verify(message) {
+                            PriceRange.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.price != null && message.hasOwnProperty("price")) {
-                                    var error = $root.google.cloud.retail.v2.Interval.verify(message.price);
+                                    var error = $root.google.cloud.retail.v2.Interval.verify(message.price, long + 1);
                                     if (error)
                                         return "price." + error;
                                 }
                                 if (message.originalPrice != null && message.hasOwnProperty("originalPrice")) {
-                                    var error = $root.google.cloud.retail.v2.Interval.verify(message.originalPrice);
+                                    var error = $root.google.cloud.retail.v2.Interval.verify(message.originalPrice, long + 1);
                                     if (error)
                                         return "originalPrice." + error;
                                 }
@@ -12322,19 +12859,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.PriceInfo.PriceRange} PriceRange
                              */
-                            PriceRange.fromObject = function fromObject(object) {
+                            PriceRange.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.PriceInfo.PriceRange)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.PriceInfo.PriceRange();
                                 if (object.price != null) {
                                     if (typeof object.price !== "object")
                                         throw TypeError(".google.cloud.retail.v2.PriceInfo.PriceRange.price: object expected");
-                                    message.price = $root.google.cloud.retail.v2.Interval.fromObject(object.price);
+                                    message.price = $root.google.cloud.retail.v2.Interval.fromObject(object.price, long + 1);
                                 }
                                 if (object.originalPrice != null) {
                                     if (typeof object.originalPrice !== "object")
                                         throw TypeError(".google.cloud.retail.v2.PriceInfo.PriceRange.originalPrice: object expected");
-                                    message.originalPrice = $root.google.cloud.retail.v2.Interval.fromObject(object.originalPrice);
+                                    message.originalPrice = $root.google.cloud.retail.v2.Interval.fromObject(object.originalPrice, long + 1);
                                 }
                                 return message;
                             };
@@ -12418,7 +12959,7 @@
                             this.ratingHistogram = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12507,9 +13048,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Rating.decode = function decode(reader, length, error) {
+                        Rating.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Rating();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12536,7 +13081,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12567,9 +13112,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Rating.verify = function verify(message) {
+                        Rating.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.ratingCount != null && message.hasOwnProperty("ratingCount"))
                                 if (!$util.isInteger(message.ratingCount))
                                     return "ratingCount: integer expected";
@@ -12594,9 +13143,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Rating} Rating
                          */
-                        Rating.fromObject = function fromObject(object) {
+                        Rating.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Rating)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Rating();
                             if (object.ratingCount != null)
                                 message.ratingCount = object.ratingCount | 0;
@@ -12695,7 +13248,7 @@
                         function UserInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12790,9 +13343,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserInfo.decode = function decode(reader, length, error) {
+                        UserInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UserInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12816,7 +13373,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12847,9 +13404,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserInfo.verify = function verify(message) {
+                        UserInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.userId != null && message.hasOwnProperty("userId"))
                                 if (!$util.isString(message.userId))
                                     return "userId: string expected";
@@ -12873,9 +13434,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UserInfo} UserInfo
                          */
-                        UserInfo.fromObject = function fromObject(object) {
+                        UserInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UserInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UserInfo();
                             if (object.userId != null)
                                 message.userId = String(object.userId);
@@ -12972,7 +13537,7 @@
                             this.fulfillmentTypes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13071,9 +13636,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        LocalInventory.decode = function decode(reader, length, error) {
+                        LocalInventory.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.LocalInventory(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13085,7 +13654,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.priceInfo = $root.google.cloud.retail.v2.PriceInfo.decode(reader, reader.uint32());
+                                        message.priceInfo = $root.google.cloud.retail.v2.PriceInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -13101,13 +13670,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2.CustomAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributes, key);
                                         message.attributes[key] = value;
                                         break;
                                     }
@@ -13118,7 +13689,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13149,14 +13720,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        LocalInventory.verify = function verify(message) {
+                        LocalInventory.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.placeId != null && message.hasOwnProperty("placeId"))
                                 if (!$util.isString(message.placeId))
                                     return "placeId: string expected";
                             if (message.priceInfo != null && message.hasOwnProperty("priceInfo")) {
-                                var error = $root.google.cloud.retail.v2.PriceInfo.verify(message.priceInfo);
+                                var error = $root.google.cloud.retail.v2.PriceInfo.verify(message.priceInfo, long + 1);
                                 if (error)
                                     return "priceInfo." + error;
                             }
@@ -13165,7 +13740,7 @@
                                     return "attributes: object expected";
                                 var key = Object.keys(message.attributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.CustomAttribute.verify(message.attributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                     if (error)
                                         return "attributes." + error;
                                 }
@@ -13188,25 +13763,31 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.LocalInventory} LocalInventory
                          */
-                        LocalInventory.fromObject = function fromObject(object) {
+                        LocalInventory.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.LocalInventory)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.LocalInventory();
                             if (object.placeId != null)
                                 message.placeId = String(object.placeId);
                             if (object.priceInfo != null) {
                                 if (typeof object.priceInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2.LocalInventory.priceInfo: object expected");
-                                message.priceInfo = $root.google.cloud.retail.v2.PriceInfo.fromObject(object.priceInfo);
+                                message.priceInfo = $root.google.cloud.retail.v2.PriceInfo.fromObject(object.priceInfo, long + 1);
                             }
                             if (object.attributes) {
                                 if (typeof object.attributes !== "object")
                                     throw TypeError(".google.cloud.retail.v2.LocalInventory.attributes: object expected");
                                 message.attributes = {};
                                 for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributes, keys[i]);
                                     if (typeof object.attributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.LocalInventory.attributes: object expected");
-                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                 }
                             }
                             if (object.fulfillmentTypes) {
@@ -13247,8 +13828,11 @@
                             var keys2;
                             if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                 object.attributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributes, keys2[j]);
                                     object.attributes[keys2[j]] = $root.google.cloud.retail.v2.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                }
                             }
                             if (message.fulfillmentTypes && message.fulfillmentTypes.length) {
                                 object.fulfillmentTypes = [];
@@ -13310,7 +13894,7 @@
                             this.droppedPins = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13391,9 +13975,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PinControlMetadata.decode = function decode(reader, length, error) {
+                        PinControlMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PinControlMetadata(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13413,10 +14001,10 @@
                                                 key = reader.int64();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
@@ -13436,10 +14024,10 @@
                                                 key = reader.int64();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
@@ -13447,7 +14035,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13478,9 +14066,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PinControlMetadata.verify = function verify(message) {
+                        PinControlMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.allMatchedPins != null && message.hasOwnProperty("allMatchedPins")) {
                                 if (!$util.isObject(message.allMatchedPins))
                                     return "allMatchedPins: object expected";
@@ -13489,7 +14081,7 @@
                                     if (!$util.key64Re.test(key[i]))
                                         return "allMatchedPins: integer|Long key{k:int64} expected";
                                     {
-                                        var error = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.verify(message.allMatchedPins[key[i]]);
+                                        var error = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.verify(message.allMatchedPins[key[i]], long + 1);
                                         if (error)
                                             return "allMatchedPins." + error;
                                     }
@@ -13503,7 +14095,7 @@
                                     if (!$util.key64Re.test(key[i]))
                                         return "droppedPins: integer|Long key{k:int64} expected";
                                     {
-                                        var error = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.verify(message.droppedPins[key[i]]);
+                                        var error = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.verify(message.droppedPins[key[i]], long + 1);
                                         if (error)
                                             return "droppedPins." + error;
                                     }
@@ -13520,18 +14112,24 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PinControlMetadata} PinControlMetadata
                          */
-                        PinControlMetadata.fromObject = function fromObject(object) {
+                        PinControlMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PinControlMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PinControlMetadata();
                             if (object.allMatchedPins) {
                                 if (typeof object.allMatchedPins !== "object")
                                     throw TypeError(".google.cloud.retail.v2.PinControlMetadata.allMatchedPins: object expected");
                                 message.allMatchedPins = {};
                                 for (var keys = Object.keys(object.allMatchedPins), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.allMatchedPins, keys[i]);
                                     if (typeof object.allMatchedPins[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.PinControlMetadata.allMatchedPins: object expected");
-                                    message.allMatchedPins[keys[i]] = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.fromObject(object.allMatchedPins[keys[i]]);
+                                    message.allMatchedPins[keys[i]] = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.fromObject(object.allMatchedPins[keys[i]], long + 1);
                                 }
                             }
                             if (object.droppedPins) {
@@ -13539,9 +14137,11 @@
                                     throw TypeError(".google.cloud.retail.v2.PinControlMetadata.droppedPins: object expected");
                                 message.droppedPins = {};
                                 for (var keys = Object.keys(object.droppedPins), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.droppedPins, keys[i]);
                                     if (typeof object.droppedPins[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.PinControlMetadata.droppedPins: object expected");
-                                    message.droppedPins[keys[i]] = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.fromObject(object.droppedPins[keys[i]]);
+                                    message.droppedPins[keys[i]] = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.fromObject(object.droppedPins[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -13567,13 +14167,19 @@
                             var keys2;
                             if (message.allMatchedPins && (keys2 = Object.keys(message.allMatchedPins)).length) {
                                 object.allMatchedPins = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.allMatchedPins, keys2[j]);
                                     object.allMatchedPins[keys2[j]] = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.toObject(message.allMatchedPins[keys2[j]], options);
+                                }
                             }
                             if (message.droppedPins && (keys2 = Object.keys(message.droppedPins)).length) {
                                 object.droppedPins = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.droppedPins, keys2[j]);
                                     object.droppedPins[keys2[j]] = $root.google.cloud.retail.v2.PinControlMetadata.ProductPins.toObject(message.droppedPins[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -13625,7 +14231,7 @@
                                 this.productId = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -13691,9 +14297,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ProductPins.decode = function decode(reader, length, error) {
+                            ProductPins.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PinControlMetadata.ProductPins();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -13707,7 +14317,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -13738,9 +14348,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ProductPins.verify = function verify(message) {
+                            ProductPins.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.productId != null && message.hasOwnProperty("productId")) {
                                     if (!Array.isArray(message.productId))
                                         return "productId: array expected";
@@ -13759,9 +14373,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.PinControlMetadata.ProductPins} ProductPins
                              */
-                            ProductPins.fromObject = function fromObject(object) {
+                            ProductPins.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.PinControlMetadata.ProductPins)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.PinControlMetadata.ProductPins();
                                 if (object.productId) {
                                     if (!Array.isArray(object.productId))
@@ -13849,7 +14467,7 @@
                             this.values = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13915,9 +14533,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        StringList.decode = function decode(reader, length, error) {
+                        StringList.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.StringList();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13931,7 +14553,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13962,9 +14584,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        StringList.verify = function verify(message) {
+                        StringList.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.values != null && message.hasOwnProperty("values")) {
                                 if (!Array.isArray(message.values))
                                     return "values: array expected";
@@ -13983,9 +14609,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.StringList} StringList
                          */
-                        StringList.fromObject = function fromObject(object) {
+                        StringList.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.StringList)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.StringList();
                             if (object.values) {
                                 if (!Array.isArray(object.values))
@@ -14070,7 +14700,7 @@
                             this.values = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14139,9 +14769,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DoubleList.decode = function decode(reader, length, error) {
+                        DoubleList.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.DoubleList();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14160,7 +14794,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14191,9 +14825,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DoubleList.verify = function verify(message) {
+                        DoubleList.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.values != null && message.hasOwnProperty("values")) {
                                 if (!Array.isArray(message.values))
                                     return "values: array expected";
@@ -14212,9 +14850,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.DoubleList} DoubleList
                          */
-                        DoubleList.fromObject = function fromObject(object) {
+                        DoubleList.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.DoubleList)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.DoubleList();
                             if (object.values) {
                                 if (!Array.isArray(object.values))
@@ -14300,7 +14942,7 @@
                             this.inputUris = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14376,9 +15018,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GcsSource.decode = function decode(reader, length, error) {
+                        GcsSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GcsSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14396,7 +15042,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14427,9 +15073,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GcsSource.verify = function verify(message) {
+                        GcsSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.inputUris != null && message.hasOwnProperty("inputUris")) {
                                 if (!Array.isArray(message.inputUris))
                                     return "inputUris: array expected";
@@ -14451,9 +15101,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GcsSource} GcsSource
                          */
-                        GcsSource.fromObject = function fromObject(object) {
+                        GcsSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GcsSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GcsSource();
                             if (object.inputUris) {
                                 if (!Array.isArray(object.inputUris))
@@ -14548,7 +15202,7 @@
                         function BigQuerySource(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14677,9 +15331,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BigQuerySource.decode = function decode(reader, length, error) {
+                        BigQuerySource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.BigQuerySource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14687,7 +15345,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 6: {
-                                        message.partitionDate = $root.google.type.Date.decode(reader, reader.uint32());
+                                        message.partitionDate = $root.google.type.Date.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -14711,7 +15369,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14742,14 +15400,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BigQuerySource.verify = function verify(message) {
+                        BigQuerySource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.partitionDate != null && message.hasOwnProperty("partitionDate")) {
                                 properties.partition = 1;
                                 {
-                                    var error = $root.google.type.Date.verify(message.partitionDate);
+                                    var error = $root.google.type.Date.verify(message.partitionDate, long + 1);
                                     if (error)
                                         return "partitionDate." + error;
                                 }
@@ -14780,14 +15442,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.BigQuerySource} BigQuerySource
                          */
-                        BigQuerySource.fromObject = function fromObject(object) {
+                        BigQuerySource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.BigQuerySource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.BigQuerySource();
                             if (object.partitionDate != null) {
                                 if (typeof object.partitionDate !== "object")
                                     throw TypeError(".google.cloud.retail.v2.BigQuerySource.partitionDate: object expected");
-                                message.partitionDate = $root.google.type.Date.fromObject(object.partitionDate);
+                                message.partitionDate = $root.google.type.Date.fromObject(object.partitionDate, long + 1);
                             }
                             if (object.projectId != null)
                                 message.projectId = String(object.projectId);
@@ -14890,7 +15556,7 @@
                             this.products = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14956,9 +15622,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductInlineSource.decode = function decode(reader, length, error) {
+                        ProductInlineSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ProductInlineSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14968,11 +15638,11 @@
                                 case 1: {
                                         if (!(message.products && message.products.length))
                                             message.products = [];
-                                        message.products.push($root.google.cloud.retail.v2.Product.decode(reader, reader.uint32()));
+                                        message.products.push($root.google.cloud.retail.v2.Product.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15003,14 +15673,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductInlineSource.verify = function verify(message) {
+                        ProductInlineSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.products != null && message.hasOwnProperty("products")) {
                                 if (!Array.isArray(message.products))
                                     return "products: array expected";
                                 for (var i = 0; i < message.products.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Product.verify(message.products[i]);
+                                    var error = $root.google.cloud.retail.v2.Product.verify(message.products[i], long + 1);
                                     if (error)
                                         return "products." + error;
                                 }
@@ -15026,9 +15700,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ProductInlineSource} ProductInlineSource
                          */
-                        ProductInlineSource.fromObject = function fromObject(object) {
+                        ProductInlineSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ProductInlineSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ProductInlineSource();
                             if (object.products) {
                                 if (!Array.isArray(object.products))
@@ -15037,7 +15715,7 @@
                                 for (var i = 0; i < object.products.length; ++i) {
                                     if (typeof object.products[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ProductInlineSource.products: object expected");
-                                    message.products[i] = $root.google.cloud.retail.v2.Product.fromObject(object.products[i]);
+                                    message.products[i] = $root.google.cloud.retail.v2.Product.fromObject(object.products[i], long + 1);
                                 }
                             }
                             return message;
@@ -15116,7 +15794,7 @@
                             this.userEvents = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15182,9 +15860,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEventInlineSource.decode = function decode(reader, length, error) {
+                        UserEventInlineSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UserEventInlineSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15194,11 +15876,11 @@
                                 case 1: {
                                         if (!(message.userEvents && message.userEvents.length))
                                             message.userEvents = [];
-                                        message.userEvents.push($root.google.cloud.retail.v2.UserEvent.decode(reader, reader.uint32()));
+                                        message.userEvents.push($root.google.cloud.retail.v2.UserEvent.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15229,14 +15911,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEventInlineSource.verify = function verify(message) {
+                        UserEventInlineSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.userEvents != null && message.hasOwnProperty("userEvents")) {
                                 if (!Array.isArray(message.userEvents))
                                     return "userEvents: array expected";
                                 for (var i = 0; i < message.userEvents.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.UserEvent.verify(message.userEvents[i]);
+                                    var error = $root.google.cloud.retail.v2.UserEvent.verify(message.userEvents[i], long + 1);
                                     if (error)
                                         return "userEvents." + error;
                                 }
@@ -15252,9 +15938,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UserEventInlineSource} UserEventInlineSource
                          */
-                        UserEventInlineSource.fromObject = function fromObject(object) {
+                        UserEventInlineSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UserEventInlineSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UserEventInlineSource();
                             if (object.userEvents) {
                                 if (!Array.isArray(object.userEvents))
@@ -15263,7 +15953,7 @@
                                 for (var i = 0; i < object.userEvents.length; ++i) {
                                     if (typeof object.userEvents[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.UserEventInlineSource.userEvents: object expected");
-                                    message.userEvents[i] = $root.google.cloud.retail.v2.UserEvent.fromObject(object.userEvents[i]);
+                                    message.userEvents[i] = $root.google.cloud.retail.v2.UserEvent.fromObject(object.userEvents[i], long + 1);
                                 }
                             }
                             return message;
@@ -15341,7 +16031,7 @@
                         function ImportErrorsConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15420,9 +16110,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportErrorsConfig.decode = function decode(reader, length, error) {
+                        ImportErrorsConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ImportErrorsConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15434,7 +16128,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15465,9 +16159,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportErrorsConfig.verify = function verify(message) {
+                        ImportErrorsConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsPrefix != null && message.hasOwnProperty("gcsPrefix")) {
                                 properties.destination = 1;
@@ -15485,9 +16183,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ImportErrorsConfig} ImportErrorsConfig
                          */
-                        ImportErrorsConfig.fromObject = function fromObject(object) {
+                        ImportErrorsConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ImportErrorsConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ImportErrorsConfig();
                             if (object.gcsPrefix != null)
                                 message.gcsPrefix = String(object.gcsPrefix);
@@ -15570,7 +16272,7 @@
                         function ImportProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15695,9 +16397,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportProductsRequest.decode = function decode(reader, length, error) {
+                        ImportProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ImportProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15713,15 +16419,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.inputConfig = $root.google.cloud.retail.v2.ProductInputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.retail.v2.ProductInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -15733,7 +16439,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15764,9 +16470,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportProductsRequest.verify = function verify(message) {
+                        ImportProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -15774,17 +16484,17 @@
                                 if (!$util.isString(message.requestId))
                                     return "requestId: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.retail.v2.ProductInputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.retail.v2.ProductInputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -15811,9 +16521,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ImportProductsRequest} ImportProductsRequest
                          */
-                        ImportProductsRequest.fromObject = function fromObject(object) {
+                        ImportProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ImportProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ImportProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -15822,17 +16536,17 @@
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportProductsRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.retail.v2.ProductInputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.retail.v2.ProductInputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportProductsRequest.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportProductsRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             switch (object.reconciliationMode) {
                             default:
@@ -15965,7 +16679,7 @@
                         function ImportUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16050,9 +16764,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportUserEventsRequest.decode = function decode(reader, length, error) {
+                        ImportUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ImportUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16064,15 +16782,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.inputConfig = $root.google.cloud.retail.v2.UserEventInputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.retail.v2.UserEventInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16103,19 +16821,23 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportUserEventsRequest.verify = function verify(message) {
+                        ImportUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.retail.v2.UserEventInputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.retail.v2.UserEventInputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
@@ -16130,21 +16852,25 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ImportUserEventsRequest} ImportUserEventsRequest
                          */
-                        ImportUserEventsRequest.fromObject = function fromObject(object) {
+                        ImportUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ImportUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ImportUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportUserEventsRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.retail.v2.UserEventInputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.retail.v2.UserEventInputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportUserEventsRequest.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             return message;
                         };
@@ -16227,7 +16953,7 @@
                         function ImportCompletionDataRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16312,9 +17038,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportCompletionDataRequest.decode = function decode(reader, length, error) {
+                        ImportCompletionDataRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ImportCompletionDataRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16326,7 +17056,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.inputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -16334,7 +17064,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16365,14 +17095,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportCompletionDataRequest.verify = function verify(message) {
+                        ImportCompletionDataRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.retail.v2.CompletionDataInputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.retail.v2.CompletionDataInputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
@@ -16390,16 +17124,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ImportCompletionDataRequest} ImportCompletionDataRequest
                          */
-                        ImportCompletionDataRequest.fromObject = function fromObject(object) {
+                        ImportCompletionDataRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ImportCompletionDataRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ImportCompletionDataRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportCompletionDataRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.retail.v2.CompletionDataInputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             if (object.notificationPubsubTopic != null)
                                 message.notificationPubsubTopic = String(object.notificationPubsubTopic);
@@ -16484,7 +17222,7 @@
                         function ProductInputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16583,9 +17321,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductInputConfig.decode = function decode(reader, length, error) {
+                        ProductInputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ProductInputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16593,19 +17335,19 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.productInlineSource = $root.google.cloud.retail.v2.ProductInlineSource.decode(reader, reader.uint32());
+                                        message.productInlineSource = $root.google.cloud.retail.v2.ProductInlineSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.gcsSource = $root.google.cloud.retail.v2.GcsSource.decode(reader, reader.uint32());
+                                        message.gcsSource = $root.google.cloud.retail.v2.GcsSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.decode(reader, reader.uint32());
+                                        message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16636,14 +17378,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductInputConfig.verify = function verify(message) {
+                        ProductInputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.productInlineSource != null && message.hasOwnProperty("productInlineSource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.ProductInlineSource.verify(message.productInlineSource);
+                                    var error = $root.google.cloud.retail.v2.ProductInlineSource.verify(message.productInlineSource, long + 1);
                                     if (error)
                                         return "productInlineSource." + error;
                                 }
@@ -16653,7 +17399,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.GcsSource.verify(message.gcsSource);
+                                    var error = $root.google.cloud.retail.v2.GcsSource.verify(message.gcsSource, long + 1);
                                     if (error)
                                         return "gcsSource." + error;
                                 }
@@ -16663,7 +17409,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.BigQuerySource.verify(message.bigQuerySource);
+                                    var error = $root.google.cloud.retail.v2.BigQuerySource.verify(message.bigQuerySource, long + 1);
                                     if (error)
                                         return "bigQuerySource." + error;
                                 }
@@ -16679,24 +17425,28 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ProductInputConfig} ProductInputConfig
                          */
-                        ProductInputConfig.fromObject = function fromObject(object) {
+                        ProductInputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ProductInputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ProductInputConfig();
                             if (object.productInlineSource != null) {
                                 if (typeof object.productInlineSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ProductInputConfig.productInlineSource: object expected");
-                                message.productInlineSource = $root.google.cloud.retail.v2.ProductInlineSource.fromObject(object.productInlineSource);
+                                message.productInlineSource = $root.google.cloud.retail.v2.ProductInlineSource.fromObject(object.productInlineSource, long + 1);
                             }
                             if (object.gcsSource != null) {
                                 if (typeof object.gcsSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ProductInputConfig.gcsSource: object expected");
-                                message.gcsSource = $root.google.cloud.retail.v2.GcsSource.fromObject(object.gcsSource);
+                                message.gcsSource = $root.google.cloud.retail.v2.GcsSource.fromObject(object.gcsSource, long + 1);
                             }
                             if (object.bigQuerySource != null) {
                                 if (typeof object.bigQuerySource !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ProductInputConfig.bigQuerySource: object expected");
-                                message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.fromObject(object.bigQuerySource);
+                                message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.fromObject(object.bigQuerySource, long + 1);
                             }
                             return message;
                         };
@@ -16783,7 +17533,7 @@
                         function UserEventInputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16882,9 +17632,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEventInputConfig.decode = function decode(reader, length, error) {
+                        UserEventInputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UserEventInputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16892,19 +17646,19 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.userEventInlineSource = $root.google.cloud.retail.v2.UserEventInlineSource.decode(reader, reader.uint32());
+                                        message.userEventInlineSource = $root.google.cloud.retail.v2.UserEventInlineSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.gcsSource = $root.google.cloud.retail.v2.GcsSource.decode(reader, reader.uint32());
+                                        message.gcsSource = $root.google.cloud.retail.v2.GcsSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.decode(reader, reader.uint32());
+                                        message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16935,14 +17689,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEventInputConfig.verify = function verify(message) {
+                        UserEventInputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.userEventInlineSource != null && message.hasOwnProperty("userEventInlineSource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.UserEventInlineSource.verify(message.userEventInlineSource);
+                                    var error = $root.google.cloud.retail.v2.UserEventInlineSource.verify(message.userEventInlineSource, long + 1);
                                     if (error)
                                         return "userEventInlineSource." + error;
                                 }
@@ -16952,7 +17710,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.GcsSource.verify(message.gcsSource);
+                                    var error = $root.google.cloud.retail.v2.GcsSource.verify(message.gcsSource, long + 1);
                                     if (error)
                                         return "gcsSource." + error;
                                 }
@@ -16962,7 +17720,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.BigQuerySource.verify(message.bigQuerySource);
+                                    var error = $root.google.cloud.retail.v2.BigQuerySource.verify(message.bigQuerySource, long + 1);
                                     if (error)
                                         return "bigQuerySource." + error;
                                 }
@@ -16978,24 +17736,28 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UserEventInputConfig} UserEventInputConfig
                          */
-                        UserEventInputConfig.fromObject = function fromObject(object) {
+                        UserEventInputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UserEventInputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UserEventInputConfig();
                             if (object.userEventInlineSource != null) {
                                 if (typeof object.userEventInlineSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UserEventInputConfig.userEventInlineSource: object expected");
-                                message.userEventInlineSource = $root.google.cloud.retail.v2.UserEventInlineSource.fromObject(object.userEventInlineSource);
+                                message.userEventInlineSource = $root.google.cloud.retail.v2.UserEventInlineSource.fromObject(object.userEventInlineSource, long + 1);
                             }
                             if (object.gcsSource != null) {
                                 if (typeof object.gcsSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UserEventInputConfig.gcsSource: object expected");
-                                message.gcsSource = $root.google.cloud.retail.v2.GcsSource.fromObject(object.gcsSource);
+                                message.gcsSource = $root.google.cloud.retail.v2.GcsSource.fromObject(object.gcsSource, long + 1);
                             }
                             if (object.bigQuerySource != null) {
                                 if (typeof object.bigQuerySource !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UserEventInputConfig.bigQuerySource: object expected");
-                                message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.fromObject(object.bigQuerySource);
+                                message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.fromObject(object.bigQuerySource, long + 1);
                             }
                             return message;
                         };
@@ -17080,7 +17842,7 @@
                         function CompletionDataInputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -17159,9 +17921,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompletionDataInputConfig.decode = function decode(reader, length, error) {
+                        CompletionDataInputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CompletionDataInputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -17169,11 +17935,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.decode(reader, reader.uint32());
+                                        message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -17204,14 +17970,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompletionDataInputConfig.verify = function verify(message) {
+                        CompletionDataInputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.bigQuerySource != null && message.hasOwnProperty("bigQuerySource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.BigQuerySource.verify(message.bigQuerySource);
+                                    var error = $root.google.cloud.retail.v2.BigQuerySource.verify(message.bigQuerySource, long + 1);
                                     if (error)
                                         return "bigQuerySource." + error;
                                 }
@@ -17227,14 +17997,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CompletionDataInputConfig} CompletionDataInputConfig
                          */
-                        CompletionDataInputConfig.fromObject = function fromObject(object) {
+                        CompletionDataInputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CompletionDataInputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CompletionDataInputConfig();
                             if (object.bigQuerySource != null) {
                                 if (typeof object.bigQuerySource !== "object")
                                     throw TypeError(".google.cloud.retail.v2.CompletionDataInputConfig.bigQuerySource: object expected");
-                                message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.fromObject(object.bigQuerySource);
+                                message.bigQuerySource = $root.google.cloud.retail.v2.BigQuerySource.fromObject(object.bigQuerySource, long + 1);
                             }
                             return message;
                         };
@@ -17314,7 +18088,7 @@
                         function ImportMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -17429,9 +18203,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportMetadata.decode = function decode(reader, length, error) {
+                        ImportMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ImportMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -17439,11 +18217,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -17463,7 +18241,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -17494,16 +18272,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportMetadata.verify = function verify(message) {
+                        ImportMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -17530,19 +18312,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ImportMetadata} ImportMetadata
                          */
-                        ImportMetadata.fromObject = function fromObject(object) {
+                        ImportMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ImportMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ImportMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportMetadata.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.successCount != null)
                                 if ($util.Long)
@@ -17670,7 +18456,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -17746,9 +18532,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportProductsResponse.decode = function decode(reader, length, error) {
+                        ImportProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ImportProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -17758,15 +18548,15 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -17797,20 +18587,24 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportProductsResponse.verify = function verify(message) {
+                        ImportProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
@@ -17825,9 +18619,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ImportProductsResponse} ImportProductsResponse
                          */
-                        ImportProductsResponse.fromObject = function fromObject(object) {
+                        ImportProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ImportProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ImportProductsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -17836,13 +18634,13 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ImportProductsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportProductsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             return message;
                         };
@@ -17926,7 +18724,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -18012,9 +18810,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportUserEventsResponse.decode = function decode(reader, length, error) {
+                        ImportUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ImportUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -18024,19 +18826,19 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.importSummary = $root.google.cloud.retail.v2.UserEventImportSummary.decode(reader, reader.uint32());
+                                        message.importSummary = $root.google.cloud.retail.v2.UserEventImportSummary.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -18067,25 +18869,29 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportUserEventsResponse.verify = function verify(message) {
+                        ImportUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.importSummary != null && message.hasOwnProperty("importSummary")) {
-                                var error = $root.google.cloud.retail.v2.UserEventImportSummary.verify(message.importSummary);
+                                var error = $root.google.cloud.retail.v2.UserEventImportSummary.verify(message.importSummary, long + 1);
                                 if (error)
                                     return "importSummary." + error;
                             }
@@ -18100,9 +18906,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ImportUserEventsResponse} ImportUserEventsResponse
                          */
-                        ImportUserEventsResponse.fromObject = function fromObject(object) {
+                        ImportUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ImportUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ImportUserEventsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -18111,18 +18921,18 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ImportUserEventsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportUserEventsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.importSummary != null) {
                                 if (typeof object.importSummary !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ImportUserEventsResponse.importSummary: object expected");
-                                message.importSummary = $root.google.cloud.retail.v2.UserEventImportSummary.fromObject(object.importSummary);
+                                message.importSummary = $root.google.cloud.retail.v2.UserEventImportSummary.fromObject(object.importSummary, long + 1);
                             }
                             return message;
                         };
@@ -18208,7 +19018,7 @@
                         function UserEventImportSummary(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -18283,9 +19093,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEventImportSummary.decode = function decode(reader, length, error) {
+                        UserEventImportSummary.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UserEventImportSummary();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -18301,7 +19115,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -18332,9 +19146,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEventImportSummary.verify = function verify(message) {
+                        UserEventImportSummary.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.joinedEventsCount != null && message.hasOwnProperty("joinedEventsCount"))
                                 if (!$util.isInteger(message.joinedEventsCount) && !(message.joinedEventsCount && $util.isInteger(message.joinedEventsCount.low) && $util.isInteger(message.joinedEventsCount.high)))
                                     return "joinedEventsCount: integer|Long expected";
@@ -18352,9 +19170,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UserEventImportSummary} UserEventImportSummary
                          */
-                        UserEventImportSummary.fromObject = function fromObject(object) {
+                        UserEventImportSummary.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UserEventImportSummary)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UserEventImportSummary();
                             if (object.joinedEventsCount != null)
                                 if ($util.Long)
@@ -18465,7 +19287,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -18531,9 +19353,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportCompletionDataResponse.decode = function decode(reader, length, error) {
+                        ImportCompletionDataResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ImportCompletionDataResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -18543,11 +19369,11 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -18578,14 +19404,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportCompletionDataResponse.verify = function verify(message) {
+                        ImportCompletionDataResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
@@ -18601,9 +19431,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ImportCompletionDataResponse} ImportCompletionDataResponse
                          */
-                        ImportCompletionDataResponse.fromObject = function fromObject(object) {
+                        ImportCompletionDataResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ImportCompletionDataResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ImportCompletionDataResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -18612,7 +19446,7 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ImportCompletionDataResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             return message;
@@ -18737,7 +19571,7 @@
                             this.localInventories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -19162,9 +19996,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Product.decode = function decode(reader, length, error) {
+                        Product.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Product(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -19172,11 +20010,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 16: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 17: {
-                                        message.ttl = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.ttl = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
@@ -19242,13 +20080,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2.CustomAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributes, key);
                                         message.attributes[key] = value;
                                         break;
                                     }
@@ -19259,15 +20099,15 @@
                                         break;
                                     }
                                 case 14: {
-                                        message.priceInfo = $root.google.cloud.retail.v2.PriceInfo.decode(reader, reader.uint32());
+                                        message.priceInfo = $root.google.cloud.retail.v2.PriceInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 15: {
-                                        message.rating = $root.google.cloud.retail.v2.Rating.decode(reader, reader.uint32());
+                                        message.rating = $root.google.cloud.retail.v2.Rating.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 18: {
-                                        message.availableTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.availableTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
@@ -19275,13 +20115,13 @@
                                         break;
                                     }
                                 case 20: {
-                                        message.availableQuantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32());
+                                        message.availableQuantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 21: {
                                         if (!(message.fulfillmentInfo && message.fulfillmentInfo.length))
                                             message.fulfillmentInfo = [];
-                                        message.fulfillmentInfo.push($root.google.cloud.retail.v2.FulfillmentInfo.decode(reader, reader.uint32()));
+                                        message.fulfillmentInfo.push($root.google.cloud.retail.v2.FulfillmentInfo.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 22: {
@@ -19291,15 +20131,15 @@
                                 case 23: {
                                         if (!(message.images && message.images.length))
                                             message.images = [];
-                                        message.images.push($root.google.cloud.retail.v2.Image.decode(reader, reader.uint32()));
+                                        message.images.push($root.google.cloud.retail.v2.Image.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 24: {
-                                        message.audience = $root.google.cloud.retail.v2.Audience.decode(reader, reader.uint32());
+                                        message.audience = $root.google.cloud.retail.v2.Audience.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 25: {
-                                        message.colorInfo = $root.google.cloud.retail.v2.ColorInfo.decode(reader, reader.uint32());
+                                        message.colorInfo = $root.google.cloud.retail.v2.ColorInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 26: {
@@ -19329,31 +20169,31 @@
                                 case 34: {
                                         if (!(message.promotions && message.promotions.length))
                                             message.promotions = [];
-                                        message.promotions.push($root.google.cloud.retail.v2.Promotion.decode(reader, reader.uint32()));
+                                        message.promotions.push($root.google.cloud.retail.v2.Promotion.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 33: {
-                                        message.publishTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.publishTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 30: {
-                                        message.retrievableFields = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.retrievableFields = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 31: {
                                         if (!(message.variants && message.variants.length))
                                             message.variants = [];
-                                        message.variants.push($root.google.cloud.retail.v2.Product.decode(reader, reader.uint32()));
+                                        message.variants.push($root.google.cloud.retail.v2.Product.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 35: {
                                         if (!(message.localInventories && message.localInventories.length))
                                             message.localInventories = [];
-                                        message.localInventories.push($root.google.cloud.retail.v2.LocalInventory.decode(reader, reader.uint32()));
+                                        message.localInventories.push($root.google.cloud.retail.v2.LocalInventory.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -19384,14 +20224,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Product.verify = function verify(message) {
+                        Product.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
                                 properties.expiration = 1;
                                 {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                     if (error)
                                         return "expireTime." + error;
                                 }
@@ -19401,7 +20245,7 @@
                                     return "expiration: multiple values";
                                 properties.expiration = 1;
                                 {
-                                    var error = $root.google.protobuf.Duration.verify(message.ttl);
+                                    var error = $root.google.protobuf.Duration.verify(message.ttl, long + 1);
                                     if (error)
                                         return "ttl." + error;
                                 }
@@ -19463,7 +20307,7 @@
                                     return "attributes: object expected";
                                 var key = Object.keys(message.attributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.CustomAttribute.verify(message.attributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                     if (error)
                                         return "attributes." + error;
                                 }
@@ -19476,17 +20320,17 @@
                                         return "tags: string[] expected";
                             }
                             if (message.priceInfo != null && message.hasOwnProperty("priceInfo")) {
-                                var error = $root.google.cloud.retail.v2.PriceInfo.verify(message.priceInfo);
+                                var error = $root.google.cloud.retail.v2.PriceInfo.verify(message.priceInfo, long + 1);
                                 if (error)
                                     return "priceInfo." + error;
                             }
                             if (message.rating != null && message.hasOwnProperty("rating")) {
-                                var error = $root.google.cloud.retail.v2.Rating.verify(message.rating);
+                                var error = $root.google.cloud.retail.v2.Rating.verify(message.rating, long + 1);
                                 if (error)
                                     return "rating." + error;
                             }
                             if (message.availableTime != null && message.hasOwnProperty("availableTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.availableTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.availableTime, long + 1);
                                 if (error)
                                     return "availableTime." + error;
                             }
@@ -19502,7 +20346,7 @@
                                     break;
                                 }
                             if (message.availableQuantity != null && message.hasOwnProperty("availableQuantity")) {
-                                var error = $root.google.protobuf.Int32Value.verify(message.availableQuantity);
+                                var error = $root.google.protobuf.Int32Value.verify(message.availableQuantity, long + 1);
                                 if (error)
                                     return "availableQuantity." + error;
                             }
@@ -19510,7 +20354,7 @@
                                 if (!Array.isArray(message.fulfillmentInfo))
                                     return "fulfillmentInfo: array expected";
                                 for (var i = 0; i < message.fulfillmentInfo.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.FulfillmentInfo.verify(message.fulfillmentInfo[i]);
+                                    var error = $root.google.cloud.retail.v2.FulfillmentInfo.verify(message.fulfillmentInfo[i], long + 1);
                                     if (error)
                                         return "fulfillmentInfo." + error;
                                 }
@@ -19522,18 +20366,18 @@
                                 if (!Array.isArray(message.images))
                                     return "images: array expected";
                                 for (var i = 0; i < message.images.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Image.verify(message.images[i]);
+                                    var error = $root.google.cloud.retail.v2.Image.verify(message.images[i], long + 1);
                                     if (error)
                                         return "images." + error;
                                 }
                             }
                             if (message.audience != null && message.hasOwnProperty("audience")) {
-                                var error = $root.google.cloud.retail.v2.Audience.verify(message.audience);
+                                var error = $root.google.cloud.retail.v2.Audience.verify(message.audience, long + 1);
                                 if (error)
                                     return "audience." + error;
                             }
                             if (message.colorInfo != null && message.hasOwnProperty("colorInfo")) {
-                                var error = $root.google.cloud.retail.v2.ColorInfo.verify(message.colorInfo);
+                                var error = $root.google.cloud.retail.v2.ColorInfo.verify(message.colorInfo, long + 1);
                                 if (error)
                                     return "colorInfo." + error;
                             }
@@ -19569,18 +20413,18 @@
                                 if (!Array.isArray(message.promotions))
                                     return "promotions: array expected";
                                 for (var i = 0; i < message.promotions.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Promotion.verify(message.promotions[i]);
+                                    var error = $root.google.cloud.retail.v2.Promotion.verify(message.promotions[i], long + 1);
                                     if (error)
                                         return "promotions." + error;
                                 }
                             }
                             if (message.publishTime != null && message.hasOwnProperty("publishTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.publishTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.publishTime, long + 1);
                                 if (error)
                                     return "publishTime." + error;
                             }
                             if (message.retrievableFields != null && message.hasOwnProperty("retrievableFields")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.retrievableFields);
+                                var error = $root.google.protobuf.FieldMask.verify(message.retrievableFields, long + 1);
                                 if (error)
                                     return "retrievableFields." + error;
                             }
@@ -19588,7 +20432,7 @@
                                 if (!Array.isArray(message.variants))
                                     return "variants: array expected";
                                 for (var i = 0; i < message.variants.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Product.verify(message.variants[i]);
+                                    var error = $root.google.cloud.retail.v2.Product.verify(message.variants[i], long + 1);
                                     if (error)
                                         return "variants." + error;
                                 }
@@ -19597,7 +20441,7 @@
                                 if (!Array.isArray(message.localInventories))
                                     return "localInventories: array expected";
                                 for (var i = 0; i < message.localInventories.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.LocalInventory.verify(message.localInventories[i]);
+                                    var error = $root.google.cloud.retail.v2.LocalInventory.verify(message.localInventories[i], long + 1);
                                     if (error)
                                         return "localInventories." + error;
                                 }
@@ -19613,19 +20457,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Product} Product
                          */
-                        Product.fromObject = function fromObject(object) {
+                        Product.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Product)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Product();
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Product.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             if (object.ttl != null) {
                                 if (typeof object.ttl !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Product.ttl: object expected");
-                                message.ttl = $root.google.protobuf.Duration.fromObject(object.ttl);
+                                message.ttl = $root.google.protobuf.Duration.fromObject(object.ttl, long + 1);
                             }
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -19691,9 +20539,11 @@
                                     throw TypeError(".google.cloud.retail.v2.Product.attributes: object expected");
                                 message.attributes = {};
                                 for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributes, keys[i]);
                                     if (typeof object.attributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Product.attributes: object expected");
-                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                 }
                             }
                             if (object.tags) {
@@ -19706,17 +20556,17 @@
                             if (object.priceInfo != null) {
                                 if (typeof object.priceInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Product.priceInfo: object expected");
-                                message.priceInfo = $root.google.cloud.retail.v2.PriceInfo.fromObject(object.priceInfo);
+                                message.priceInfo = $root.google.cloud.retail.v2.PriceInfo.fromObject(object.priceInfo, long + 1);
                             }
                             if (object.rating != null) {
                                 if (typeof object.rating !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Product.rating: object expected");
-                                message.rating = $root.google.cloud.retail.v2.Rating.fromObject(object.rating);
+                                message.rating = $root.google.cloud.retail.v2.Rating.fromObject(object.rating, long + 1);
                             }
                             if (object.availableTime != null) {
                                 if (typeof object.availableTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Product.availableTime: object expected");
-                                message.availableTime = $root.google.protobuf.Timestamp.fromObject(object.availableTime);
+                                message.availableTime = $root.google.protobuf.Timestamp.fromObject(object.availableTime, long + 1);
                             }
                             switch (object.availability) {
                             default:
@@ -19749,7 +20599,7 @@
                             if (object.availableQuantity != null) {
                                 if (typeof object.availableQuantity !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Product.availableQuantity: object expected");
-                                message.availableQuantity = $root.google.protobuf.Int32Value.fromObject(object.availableQuantity);
+                                message.availableQuantity = $root.google.protobuf.Int32Value.fromObject(object.availableQuantity, long + 1);
                             }
                             if (object.fulfillmentInfo) {
                                 if (!Array.isArray(object.fulfillmentInfo))
@@ -19758,7 +20608,7 @@
                                 for (var i = 0; i < object.fulfillmentInfo.length; ++i) {
                                     if (typeof object.fulfillmentInfo[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Product.fulfillmentInfo: object expected");
-                                    message.fulfillmentInfo[i] = $root.google.cloud.retail.v2.FulfillmentInfo.fromObject(object.fulfillmentInfo[i]);
+                                    message.fulfillmentInfo[i] = $root.google.cloud.retail.v2.FulfillmentInfo.fromObject(object.fulfillmentInfo[i], long + 1);
                                 }
                             }
                             if (object.uri != null)
@@ -19770,18 +20620,18 @@
                                 for (var i = 0; i < object.images.length; ++i) {
                                     if (typeof object.images[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Product.images: object expected");
-                                    message.images[i] = $root.google.cloud.retail.v2.Image.fromObject(object.images[i]);
+                                    message.images[i] = $root.google.cloud.retail.v2.Image.fromObject(object.images[i], long + 1);
                                 }
                             }
                             if (object.audience != null) {
                                 if (typeof object.audience !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Product.audience: object expected");
-                                message.audience = $root.google.cloud.retail.v2.Audience.fromObject(object.audience);
+                                message.audience = $root.google.cloud.retail.v2.Audience.fromObject(object.audience, long + 1);
                             }
                             if (object.colorInfo != null) {
                                 if (typeof object.colorInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Product.colorInfo: object expected");
-                                message.colorInfo = $root.google.cloud.retail.v2.ColorInfo.fromObject(object.colorInfo);
+                                message.colorInfo = $root.google.cloud.retail.v2.ColorInfo.fromObject(object.colorInfo, long + 1);
                             }
                             if (object.sizes) {
                                 if (!Array.isArray(object.sizes))
@@ -19818,18 +20668,18 @@
                                 for (var i = 0; i < object.promotions.length; ++i) {
                                     if (typeof object.promotions[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Product.promotions: object expected");
-                                    message.promotions[i] = $root.google.cloud.retail.v2.Promotion.fromObject(object.promotions[i]);
+                                    message.promotions[i] = $root.google.cloud.retail.v2.Promotion.fromObject(object.promotions[i], long + 1);
                                 }
                             }
                             if (object.publishTime != null) {
                                 if (typeof object.publishTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Product.publishTime: object expected");
-                                message.publishTime = $root.google.protobuf.Timestamp.fromObject(object.publishTime);
+                                message.publishTime = $root.google.protobuf.Timestamp.fromObject(object.publishTime, long + 1);
                             }
                             if (object.retrievableFields != null) {
                                 if (typeof object.retrievableFields !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Product.retrievableFields: object expected");
-                                message.retrievableFields = $root.google.protobuf.FieldMask.fromObject(object.retrievableFields);
+                                message.retrievableFields = $root.google.protobuf.FieldMask.fromObject(object.retrievableFields, long + 1);
                             }
                             if (object.variants) {
                                 if (!Array.isArray(object.variants))
@@ -19838,7 +20688,7 @@
                                 for (var i = 0; i < object.variants.length; ++i) {
                                     if (typeof object.variants[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Product.variants: object expected");
-                                    message.variants[i] = $root.google.cloud.retail.v2.Product.fromObject(object.variants[i]);
+                                    message.variants[i] = $root.google.cloud.retail.v2.Product.fromObject(object.variants[i], long + 1);
                                 }
                             }
                             if (object.localInventories) {
@@ -19848,7 +20698,7 @@
                                 for (var i = 0; i < object.localInventories.length; ++i) {
                                     if (typeof object.localInventories[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Product.localInventories: object expected");
-                                    message.localInventories[i] = $root.google.cloud.retail.v2.LocalInventory.fromObject(object.localInventories[i]);
+                                    message.localInventories[i] = $root.google.cloud.retail.v2.LocalInventory.fromObject(object.localInventories[i], long + 1);
                                 }
                             }
                             return message;
@@ -19938,8 +20788,11 @@
                             var keys2;
                             if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                 object.attributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributes, keys2[j]);
                                     object.attributes[keys2[j]] = $root.google.cloud.retail.v2.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                }
                             }
                             if (message.tags && message.tags.length) {
                                 object.tags = [];
@@ -20111,7 +20964,7 @@
                         function Promotion(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -20176,9 +21029,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Promotion.decode = function decode(reader, length, error) {
+                        Promotion.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Promotion();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -20190,7 +21047,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -20221,9 +21078,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Promotion.verify = function verify(message) {
+                        Promotion.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.promotionId != null && message.hasOwnProperty("promotionId"))
                                 if (!$util.isString(message.promotionId))
                                     return "promotionId: string expected";
@@ -20238,9 +21099,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Promotion} Promotion
                          */
-                        Promotion.fromObject = function fromObject(object) {
+                        Promotion.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Promotion)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Promotion();
                             if (object.promotionId != null)
                                 message.promotionId = String(object.promotionId);
@@ -20340,7 +21205,7 @@
                             this.pageCategories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -20611,9 +21476,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEvent.decode = function decode(reader, length, error) {
+                        UserEvent.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UserEvent(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -20633,7 +21502,7 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.eventTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.eventTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
@@ -20649,11 +21518,11 @@
                                 case 6: {
                                         if (!(message.productDetails && message.productDetails.length))
                                             message.productDetails = [];
-                                        message.productDetails.push($root.google.cloud.retail.v2.ProductDetail.decode(reader, reader.uint32()));
+                                        message.productDetails.push($root.google.cloud.retail.v2.ProductDetail.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 22: {
-                                        message.completionDetail = $root.google.cloud.retail.v2.CompletionDetail.decode(reader, reader.uint32());
+                                        message.completionDetail = $root.google.cloud.retail.v2.CompletionDetail.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -20669,13 +21538,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2.CustomAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributes, key);
                                         message.attributes[key] = value;
                                         break;
                                     }
@@ -20684,7 +21555,7 @@
                                         break;
                                     }
                                 case 9: {
-                                        message.purchaseTransaction = $root.google.cloud.retail.v2.PurchaseTransaction.decode(reader, reader.uint32());
+                                        message.purchaseTransaction = $root.google.cloud.retail.v2.PurchaseTransaction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -20710,7 +21581,7 @@
                                         break;
                                     }
                                 case 12: {
-                                        message.userInfo = $root.google.cloud.retail.v2.UserInfo.decode(reader, reader.uint32());
+                                        message.userInfo = $root.google.cloud.retail.v2.UserInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
@@ -20730,7 +21601,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -20761,9 +21632,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEvent.verify = function verify(message) {
+                        UserEvent.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.eventType != null && message.hasOwnProperty("eventType"))
                                 if (!$util.isString(message.eventType))
                                     return "eventType: string expected";
@@ -20774,7 +21649,7 @@
                                 if (!$util.isString(message.sessionId))
                                     return "sessionId: string expected";
                             if (message.eventTime != null && message.hasOwnProperty("eventTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.eventTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.eventTime, long + 1);
                                 if (error)
                                     return "eventTime." + error;
                             }
@@ -20792,13 +21667,13 @@
                                 if (!Array.isArray(message.productDetails))
                                     return "productDetails: array expected";
                                 for (var i = 0; i < message.productDetails.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.ProductDetail.verify(message.productDetails[i]);
+                                    var error = $root.google.cloud.retail.v2.ProductDetail.verify(message.productDetails[i], long + 1);
                                     if (error)
                                         return "productDetails." + error;
                                 }
                             }
                             if (message.completionDetail != null && message.hasOwnProperty("completionDetail")) {
-                                var error = $root.google.cloud.retail.v2.CompletionDetail.verify(message.completionDetail);
+                                var error = $root.google.cloud.retail.v2.CompletionDetail.verify(message.completionDetail, long + 1);
                                 if (error)
                                     return "completionDetail." + error;
                             }
@@ -20807,7 +21682,7 @@
                                     return "attributes: object expected";
                                 var key = Object.keys(message.attributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.CustomAttribute.verify(message.attributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                     if (error)
                                         return "attributes." + error;
                                 }
@@ -20816,7 +21691,7 @@
                                 if (!$util.isString(message.cartId))
                                     return "cartId: string expected";
                             if (message.purchaseTransaction != null && message.hasOwnProperty("purchaseTransaction")) {
-                                var error = $root.google.cloud.retail.v2.PurchaseTransaction.verify(message.purchaseTransaction);
+                                var error = $root.google.cloud.retail.v2.PurchaseTransaction.verify(message.purchaseTransaction, long + 1);
                                 if (error)
                                     return "purchaseTransaction." + error;
                             }
@@ -20840,7 +21715,7 @@
                                         return "pageCategories: string[] expected";
                             }
                             if (message.userInfo != null && message.hasOwnProperty("userInfo")) {
-                                var error = $root.google.cloud.retail.v2.UserInfo.verify(message.userInfo);
+                                var error = $root.google.cloud.retail.v2.UserInfo.verify(message.userInfo, long + 1);
                                 if (error)
                                     return "userInfo." + error;
                             }
@@ -20867,9 +21742,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UserEvent} UserEvent
                          */
-                        UserEvent.fromObject = function fromObject(object) {
+                        UserEvent.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UserEvent)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UserEvent();
                             if (object.eventType != null)
                                 message.eventType = String(object.eventType);
@@ -20880,7 +21759,7 @@
                             if (object.eventTime != null) {
                                 if (typeof object.eventTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UserEvent.eventTime: object expected");
-                                message.eventTime = $root.google.protobuf.Timestamp.fromObject(object.eventTime);
+                                message.eventTime = $root.google.protobuf.Timestamp.fromObject(object.eventTime, long + 1);
                             }
                             if (object.experimentIds) {
                                 if (!Array.isArray(object.experimentIds))
@@ -20898,22 +21777,24 @@
                                 for (var i = 0; i < object.productDetails.length; ++i) {
                                     if (typeof object.productDetails[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.UserEvent.productDetails: object expected");
-                                    message.productDetails[i] = $root.google.cloud.retail.v2.ProductDetail.fromObject(object.productDetails[i]);
+                                    message.productDetails[i] = $root.google.cloud.retail.v2.ProductDetail.fromObject(object.productDetails[i], long + 1);
                                 }
                             }
                             if (object.completionDetail != null) {
                                 if (typeof object.completionDetail !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UserEvent.completionDetail: object expected");
-                                message.completionDetail = $root.google.cloud.retail.v2.CompletionDetail.fromObject(object.completionDetail);
+                                message.completionDetail = $root.google.cloud.retail.v2.CompletionDetail.fromObject(object.completionDetail, long + 1);
                             }
                             if (object.attributes) {
                                 if (typeof object.attributes !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UserEvent.attributes: object expected");
                                 message.attributes = {};
                                 for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributes, keys[i]);
                                     if (typeof object.attributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.UserEvent.attributes: object expected");
-                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                 }
                             }
                             if (object.cartId != null)
@@ -20921,7 +21802,7 @@
                             if (object.purchaseTransaction != null) {
                                 if (typeof object.purchaseTransaction !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UserEvent.purchaseTransaction: object expected");
-                                message.purchaseTransaction = $root.google.cloud.retail.v2.PurchaseTransaction.fromObject(object.purchaseTransaction);
+                                message.purchaseTransaction = $root.google.cloud.retail.v2.PurchaseTransaction.fromObject(object.purchaseTransaction, long + 1);
                             }
                             if (object.searchQuery != null)
                                 message.searchQuery = String(object.searchQuery);
@@ -20941,7 +21822,7 @@
                             if (object.userInfo != null) {
                                 if (typeof object.userInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UserEvent.userInfo: object expected");
-                                message.userInfo = $root.google.cloud.retail.v2.UserInfo.fromObject(object.userInfo);
+                                message.userInfo = $root.google.cloud.retail.v2.UserInfo.fromObject(object.userInfo, long + 1);
                             }
                             if (object.uri != null)
                                 message.uri = String(object.uri);
@@ -21014,8 +21895,11 @@
                             var keys2;
                             if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                 object.attributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributes, keys2[j]);
                                     object.attributes[keys2[j]] = $root.google.cloud.retail.v2.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                }
                             }
                             if (message.cartId != null && message.hasOwnProperty("cartId"))
                                 object.cartId = message.cartId;
@@ -21101,7 +21985,7 @@
                         function ProductDetail(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -21176,9 +22060,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductDetail.decode = function decode(reader, length, error) {
+                        ProductDetail.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ProductDetail();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -21186,15 +22074,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.product = $root.google.cloud.retail.v2.Product.decode(reader, reader.uint32());
+                                        message.product = $root.google.cloud.retail.v2.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.quantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32());
+                                        message.quantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -21225,16 +22113,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductDetail.verify = function verify(message) {
+                        ProductDetail.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product")) {
-                                var error = $root.google.cloud.retail.v2.Product.verify(message.product);
+                                var error = $root.google.cloud.retail.v2.Product.verify(message.product, long + 1);
                                 if (error)
                                     return "product." + error;
                             }
                             if (message.quantity != null && message.hasOwnProperty("quantity")) {
-                                var error = $root.google.protobuf.Int32Value.verify(message.quantity);
+                                var error = $root.google.protobuf.Int32Value.verify(message.quantity, long + 1);
                                 if (error)
                                     return "quantity." + error;
                             }
@@ -21249,19 +22141,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ProductDetail} ProductDetail
                          */
-                        ProductDetail.fromObject = function fromObject(object) {
+                        ProductDetail.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ProductDetail)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ProductDetail();
                             if (object.product != null) {
                                 if (typeof object.product !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ProductDetail.product: object expected");
-                                message.product = $root.google.cloud.retail.v2.Product.fromObject(object.product);
+                                message.product = $root.google.cloud.retail.v2.Product.fromObject(object.product, long + 1);
                             }
                             if (object.quantity != null) {
                                 if (typeof object.quantity !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ProductDetail.quantity: object expected");
-                                message.quantity = $root.google.protobuf.Int32Value.fromObject(object.quantity);
+                                message.quantity = $root.google.protobuf.Int32Value.fromObject(object.quantity, long + 1);
                             }
                             return message;
                         };
@@ -21341,7 +22237,7 @@
                         function CompletionDetail(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -21426,9 +22322,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompletionDetail.decode = function decode(reader, length, error) {
+                        CompletionDetail.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CompletionDetail();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -21448,7 +22348,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -21479,9 +22379,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompletionDetail.verify = function verify(message) {
+                        CompletionDetail.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.completionAttributionToken != null && message.hasOwnProperty("completionAttributionToken"))
                                 if (!$util.isString(message.completionAttributionToken))
                                     return "completionAttributionToken: string expected";
@@ -21502,9 +22406,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CompletionDetail} CompletionDetail
                          */
-                        CompletionDetail.fromObject = function fromObject(object) {
+                        CompletionDetail.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CompletionDetail)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CompletionDetail();
                             if (object.completionAttributionToken != null)
                                 message.completionAttributionToken = String(object.completionAttributionToken);
@@ -21595,7 +22503,7 @@
                         function PurchaseTransaction(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -21700,9 +22608,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurchaseTransaction.decode = function decode(reader, length, error) {
+                        PurchaseTransaction.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PurchaseTransaction();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -21730,7 +22642,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -21761,9 +22673,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurchaseTransaction.verify = function verify(message) {
+                        PurchaseTransaction.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.id != null && message.hasOwnProperty("id"))
                                 if (!$util.isString(message.id))
                                     return "id: string expected";
@@ -21790,9 +22706,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PurchaseTransaction} PurchaseTransaction
                          */
-                        PurchaseTransaction.fromObject = function fromObject(object) {
+                        PurchaseTransaction.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PurchaseTransaction)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PurchaseTransaction();
                             if (object.id != null)
                                 message.id = String(object.id);
@@ -22289,7 +23209,7 @@
                         function ListCatalogsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -22374,9 +23294,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListCatalogsRequest.decode = function decode(reader, length, error) {
+                        ListCatalogsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListCatalogsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -22396,7 +23320,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -22427,9 +23351,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListCatalogsRequest.verify = function verify(message) {
+                        ListCatalogsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -22450,9 +23378,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListCatalogsRequest} ListCatalogsRequest
                          */
-                        ListCatalogsRequest.fromObject = function fromObject(object) {
+                        ListCatalogsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListCatalogsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListCatalogsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -22541,7 +23473,7 @@
                             this.catalogs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -22617,9 +23549,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListCatalogsResponse.decode = function decode(reader, length, error) {
+                        ListCatalogsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListCatalogsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -22629,7 +23565,7 @@
                                 case 1: {
                                         if (!(message.catalogs && message.catalogs.length))
                                             message.catalogs = [];
-                                        message.catalogs.push($root.google.cloud.retail.v2.Catalog.decode(reader, reader.uint32()));
+                                        message.catalogs.push($root.google.cloud.retail.v2.Catalog.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -22637,7 +23573,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -22668,14 +23604,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListCatalogsResponse.verify = function verify(message) {
+                        ListCatalogsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalogs != null && message.hasOwnProperty("catalogs")) {
                                 if (!Array.isArray(message.catalogs))
                                     return "catalogs: array expected";
                                 for (var i = 0; i < message.catalogs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Catalog.verify(message.catalogs[i]);
+                                    var error = $root.google.cloud.retail.v2.Catalog.verify(message.catalogs[i], long + 1);
                                     if (error)
                                         return "catalogs." + error;
                                 }
@@ -22694,9 +23634,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListCatalogsResponse} ListCatalogsResponse
                          */
-                        ListCatalogsResponse.fromObject = function fromObject(object) {
+                        ListCatalogsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListCatalogsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListCatalogsResponse();
                             if (object.catalogs) {
                                 if (!Array.isArray(object.catalogs))
@@ -22705,7 +23649,7 @@
                                 for (var i = 0; i < object.catalogs.length; ++i) {
                                     if (typeof object.catalogs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ListCatalogsResponse.catalogs: object expected");
-                                    message.catalogs[i] = $root.google.cloud.retail.v2.Catalog.fromObject(object.catalogs[i]);
+                                    message.catalogs[i] = $root.google.cloud.retail.v2.Catalog.fromObject(object.catalogs[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -22790,7 +23734,7 @@
                         function UpdateCatalogRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -22865,9 +23809,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateCatalogRequest.decode = function decode(reader, length, error) {
+                        UpdateCatalogRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UpdateCatalogRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -22875,15 +23823,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.catalog = $root.google.cloud.retail.v2.Catalog.decode(reader, reader.uint32());
+                                        message.catalog = $root.google.cloud.retail.v2.Catalog.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -22914,16 +23862,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateCatalogRequest.verify = function verify(message) {
+                        UpdateCatalogRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog")) {
-                                var error = $root.google.cloud.retail.v2.Catalog.verify(message.catalog);
+                                var error = $root.google.cloud.retail.v2.Catalog.verify(message.catalog, long + 1);
                                 if (error)
                                     return "catalog." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -22938,19 +23890,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UpdateCatalogRequest} UpdateCatalogRequest
                          */
-                        UpdateCatalogRequest.fromObject = function fromObject(object) {
+                        UpdateCatalogRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UpdateCatalogRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UpdateCatalogRequest();
                             if (object.catalog != null) {
                                 if (typeof object.catalog !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateCatalogRequest.catalog: object expected");
-                                message.catalog = $root.google.cloud.retail.v2.Catalog.fromObject(object.catalog);
+                                message.catalog = $root.google.cloud.retail.v2.Catalog.fromObject(object.catalog, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateCatalogRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -23031,7 +23987,7 @@
                         function SetDefaultBranchRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -23126,9 +24082,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetDefaultBranchRequest.decode = function decode(reader, length, error) {
+                        SetDefaultBranchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SetDefaultBranchRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -23152,7 +24112,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -23183,9 +24143,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetDefaultBranchRequest.verify = function verify(message) {
+                        SetDefaultBranchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -23209,9 +24173,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.SetDefaultBranchRequest} SetDefaultBranchRequest
                          */
-                        SetDefaultBranchRequest.fromObject = function fromObject(object) {
+                        SetDefaultBranchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.SetDefaultBranchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.SetDefaultBranchRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -23303,7 +24271,7 @@
                         function GetDefaultBranchRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -23368,9 +24336,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetDefaultBranchRequest.decode = function decode(reader, length, error) {
+                        GetDefaultBranchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GetDefaultBranchRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -23382,7 +24354,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -23413,9 +24385,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetDefaultBranchRequest.verify = function verify(message) {
+                        GetDefaultBranchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -23430,9 +24406,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GetDefaultBranchRequest} GetDefaultBranchRequest
                          */
-                        GetDefaultBranchRequest.fromObject = function fromObject(object) {
+                        GetDefaultBranchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GetDefaultBranchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GetDefaultBranchRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -23510,7 +24490,7 @@
                         function GetDefaultBranchResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -23595,9 +24575,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetDefaultBranchResponse.decode = function decode(reader, length, error) {
+                        GetDefaultBranchResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GetDefaultBranchResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -23609,7 +24593,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -23617,7 +24601,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -23648,14 +24632,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetDefaultBranchResponse.verify = function verify(message) {
+                        GetDefaultBranchResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.branch != null && message.hasOwnProperty("branch"))
                                 if (!$util.isString(message.branch))
                                     return "branch: string expected";
                             if (message.setTime != null && message.hasOwnProperty("setTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.setTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.setTime, long + 1);
                                 if (error)
                                     return "setTime." + error;
                             }
@@ -23673,16 +24661,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GetDefaultBranchResponse} GetDefaultBranchResponse
                          */
-                        GetDefaultBranchResponse.fromObject = function fromObject(object) {
+                        GetDefaultBranchResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GetDefaultBranchResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GetDefaultBranchResponse();
                             if (object.branch != null)
                                 message.branch = String(object.branch);
                             if (object.setTime != null) {
                                 if (typeof object.setTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.GetDefaultBranchResponse.setTime: object expected");
-                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime);
+                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime, long + 1);
                             }
                             if (object.note != null)
                                 message.note = String(object.note);
@@ -23765,7 +24757,7 @@
                         function GetCompletionConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -23830,9 +24822,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetCompletionConfigRequest.decode = function decode(reader, length, error) {
+                        GetCompletionConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GetCompletionConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -23844,7 +24840,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -23875,9 +24871,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetCompletionConfigRequest.verify = function verify(message) {
+                        GetCompletionConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -23892,9 +24892,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GetCompletionConfigRequest} GetCompletionConfigRequest
                          */
-                        GetCompletionConfigRequest.fromObject = function fromObject(object) {
+                        GetCompletionConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GetCompletionConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GetCompletionConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -23971,7 +24975,7 @@
                         function UpdateCompletionConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -24046,9 +25050,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateCompletionConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateCompletionConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UpdateCompletionConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -24056,15 +25064,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.completionConfig = $root.google.cloud.retail.v2.CompletionConfig.decode(reader, reader.uint32());
+                                        message.completionConfig = $root.google.cloud.retail.v2.CompletionConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -24095,16 +25103,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateCompletionConfigRequest.verify = function verify(message) {
+                        UpdateCompletionConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.completionConfig != null && message.hasOwnProperty("completionConfig")) {
-                                var error = $root.google.cloud.retail.v2.CompletionConfig.verify(message.completionConfig);
+                                var error = $root.google.cloud.retail.v2.CompletionConfig.verify(message.completionConfig, long + 1);
                                 if (error)
                                     return "completionConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -24119,19 +25131,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UpdateCompletionConfigRequest} UpdateCompletionConfigRequest
                          */
-                        UpdateCompletionConfigRequest.fromObject = function fromObject(object) {
+                        UpdateCompletionConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UpdateCompletionConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UpdateCompletionConfigRequest();
                             if (object.completionConfig != null) {
                                 if (typeof object.completionConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateCompletionConfigRequest.completionConfig: object expected");
-                                message.completionConfig = $root.google.cloud.retail.v2.CompletionConfig.fromObject(object.completionConfig);
+                                message.completionConfig = $root.google.cloud.retail.v2.CompletionConfig.fromObject(object.completionConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateCompletionConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -24209,7 +25225,7 @@
                         function GetAttributesConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -24274,9 +25290,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetAttributesConfigRequest.decode = function decode(reader, length, error) {
+                        GetAttributesConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GetAttributesConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -24288,7 +25308,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -24319,9 +25339,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetAttributesConfigRequest.verify = function verify(message) {
+                        GetAttributesConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -24336,9 +25360,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GetAttributesConfigRequest} GetAttributesConfigRequest
                          */
-                        GetAttributesConfigRequest.fromObject = function fromObject(object) {
+                        GetAttributesConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GetAttributesConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GetAttributesConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -24415,7 +25443,7 @@
                         function UpdateAttributesConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -24490,9 +25518,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateAttributesConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateAttributesConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UpdateAttributesConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -24500,15 +25532,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.attributesConfig = $root.google.cloud.retail.v2.AttributesConfig.decode(reader, reader.uint32());
+                                        message.attributesConfig = $root.google.cloud.retail.v2.AttributesConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -24539,16 +25571,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateAttributesConfigRequest.verify = function verify(message) {
+                        UpdateAttributesConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig")) {
-                                var error = $root.google.cloud.retail.v2.AttributesConfig.verify(message.attributesConfig);
+                                var error = $root.google.cloud.retail.v2.AttributesConfig.verify(message.attributesConfig, long + 1);
                                 if (error)
                                     return "attributesConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -24563,19 +25599,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UpdateAttributesConfigRequest} UpdateAttributesConfigRequest
                          */
-                        UpdateAttributesConfigRequest.fromObject = function fromObject(object) {
+                        UpdateAttributesConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UpdateAttributesConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UpdateAttributesConfigRequest();
                             if (object.attributesConfig != null) {
                                 if (typeof object.attributesConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateAttributesConfigRequest.attributesConfig: object expected");
-                                message.attributesConfig = $root.google.cloud.retail.v2.AttributesConfig.fromObject(object.attributesConfig);
+                                message.attributesConfig = $root.google.cloud.retail.v2.AttributesConfig.fromObject(object.attributesConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateAttributesConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -24654,7 +25694,7 @@
                         function AddCatalogAttributeRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -24729,9 +25769,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddCatalogAttributeRequest.decode = function decode(reader, length, error) {
+                        AddCatalogAttributeRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.AddCatalogAttributeRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -24743,11 +25787,11 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.catalogAttribute = $root.google.cloud.retail.v2.CatalogAttribute.decode(reader, reader.uint32());
+                                        message.catalogAttribute = $root.google.cloud.retail.v2.CatalogAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -24778,14 +25822,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddCatalogAttributeRequest.verify = function verify(message) {
+                        AddCatalogAttributeRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
                             if (message.catalogAttribute != null && message.hasOwnProperty("catalogAttribute")) {
-                                var error = $root.google.cloud.retail.v2.CatalogAttribute.verify(message.catalogAttribute);
+                                var error = $root.google.cloud.retail.v2.CatalogAttribute.verify(message.catalogAttribute, long + 1);
                                 if (error)
                                     return "catalogAttribute." + error;
                             }
@@ -24800,16 +25848,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.AddCatalogAttributeRequest} AddCatalogAttributeRequest
                          */
-                        AddCatalogAttributeRequest.fromObject = function fromObject(object) {
+                        AddCatalogAttributeRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.AddCatalogAttributeRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.AddCatalogAttributeRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
                             if (object.catalogAttribute != null) {
                                 if (typeof object.catalogAttribute !== "object")
                                     throw TypeError(".google.cloud.retail.v2.AddCatalogAttributeRequest.catalogAttribute: object expected");
-                                message.catalogAttribute = $root.google.cloud.retail.v2.CatalogAttribute.fromObject(object.catalogAttribute);
+                                message.catalogAttribute = $root.google.cloud.retail.v2.CatalogAttribute.fromObject(object.catalogAttribute, long + 1);
                             }
                             return message;
                         };
@@ -24888,7 +25940,7 @@
                         function RemoveCatalogAttributeRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -24963,9 +26015,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveCatalogAttributeRequest.decode = function decode(reader, length, error) {
+                        RemoveCatalogAttributeRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RemoveCatalogAttributeRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -24981,7 +26037,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -25012,9 +26068,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveCatalogAttributeRequest.verify = function verify(message) {
+                        RemoveCatalogAttributeRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
@@ -25032,9 +26092,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RemoveCatalogAttributeRequest} RemoveCatalogAttributeRequest
                          */
-                        RemoveCatalogAttributeRequest.fromObject = function fromObject(object) {
+                        RemoveCatalogAttributeRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RemoveCatalogAttributeRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.RemoveCatalogAttributeRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
@@ -25118,7 +26182,7 @@
                         function ReplaceCatalogAttributeRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -25203,9 +26267,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ReplaceCatalogAttributeRequest.decode = function decode(reader, length, error) {
+                        ReplaceCatalogAttributeRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ReplaceCatalogAttributeRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -25217,15 +26285,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.catalogAttribute = $root.google.cloud.retail.v2.CatalogAttribute.decode(reader, reader.uint32());
+                                        message.catalogAttribute = $root.google.cloud.retail.v2.CatalogAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -25256,19 +26324,23 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ReplaceCatalogAttributeRequest.verify = function verify(message) {
+                        ReplaceCatalogAttributeRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
                             if (message.catalogAttribute != null && message.hasOwnProperty("catalogAttribute")) {
-                                var error = $root.google.cloud.retail.v2.CatalogAttribute.verify(message.catalogAttribute);
+                                var error = $root.google.cloud.retail.v2.CatalogAttribute.verify(message.catalogAttribute, long + 1);
                                 if (error)
                                     return "catalogAttribute." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -25283,21 +26355,25 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ReplaceCatalogAttributeRequest} ReplaceCatalogAttributeRequest
                          */
-                        ReplaceCatalogAttributeRequest.fromObject = function fromObject(object) {
+                        ReplaceCatalogAttributeRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ReplaceCatalogAttributeRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ReplaceCatalogAttributeRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
                             if (object.catalogAttribute != null) {
                                 if (typeof object.catalogAttribute !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ReplaceCatalogAttributeRequest.catalogAttribute: object expected");
-                                message.catalogAttribute = $root.google.cloud.retail.v2.CatalogAttribute.fromObject(object.catalogAttribute);
+                                message.catalogAttribute = $root.google.cloud.retail.v2.CatalogAttribute.fromObject(object.catalogAttribute, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ReplaceCatalogAttributeRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -25488,7 +26564,7 @@
                             this.languageCodes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -25634,9 +26710,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompleteQueryRequest.decode = function decode(reader, length, error) {
+                        CompleteQueryRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CompleteQueryRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -25682,7 +26762,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -25713,9 +26793,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompleteQueryRequest.verify = function verify(message) {
+                        CompleteQueryRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -25758,9 +26842,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CompleteQueryRequest} CompleteQueryRequest
                          */
-                        CompleteQueryRequest.fromObject = function fromObject(object) {
+                        CompleteQueryRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CompleteQueryRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CompleteQueryRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -25892,7 +26980,7 @@
                             this.attributeResults = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -25992,9 +27080,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompleteQueryResponse.decode = function decode(reader, length, error) {
+                        CompleteQueryResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CompleteQueryResponse(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -26004,7 +27096,7 @@
                                 case 1: {
                                         if (!(message.completionResults && message.completionResults.length))
                                             message.completionResults = [];
-                                        message.completionResults.push($root.google.cloud.retail.v2.CompleteQueryResponse.CompletionResult.decode(reader, reader.uint32()));
+                                        message.completionResults.push($root.google.cloud.retail.v2.CompleteQueryResponse.CompletionResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -26014,7 +27106,7 @@
                                 case 3: {
                                         if (!(message.recentSearchResults && message.recentSearchResults.length))
                                             message.recentSearchResults = [];
-                                        message.recentSearchResults.push($root.google.cloud.retail.v2.CompleteQueryResponse.RecentSearchResult.decode(reader, reader.uint32()));
+                                        message.recentSearchResults.push($root.google.cloud.retail.v2.CompleteQueryResponse.RecentSearchResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 4: {
@@ -26030,18 +27122,20 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2.CompleteQueryResponse.AttributeResult.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2.CompleteQueryResponse.AttributeResult.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributeResults, key);
                                         message.attributeResults[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -26072,14 +27166,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompleteQueryResponse.verify = function verify(message) {
+                        CompleteQueryResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.completionResults != null && message.hasOwnProperty("completionResults")) {
                                 if (!Array.isArray(message.completionResults))
                                     return "completionResults: array expected";
                                 for (var i = 0; i < message.completionResults.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.CompleteQueryResponse.CompletionResult.verify(message.completionResults[i]);
+                                    var error = $root.google.cloud.retail.v2.CompleteQueryResponse.CompletionResult.verify(message.completionResults[i], long + 1);
                                     if (error)
                                         return "completionResults." + error;
                                 }
@@ -26091,7 +27189,7 @@
                                 if (!Array.isArray(message.recentSearchResults))
                                     return "recentSearchResults: array expected";
                                 for (var i = 0; i < message.recentSearchResults.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.CompleteQueryResponse.RecentSearchResult.verify(message.recentSearchResults[i]);
+                                    var error = $root.google.cloud.retail.v2.CompleteQueryResponse.RecentSearchResult.verify(message.recentSearchResults[i], long + 1);
                                     if (error)
                                         return "recentSearchResults." + error;
                                 }
@@ -26101,7 +27199,7 @@
                                     return "attributeResults: object expected";
                                 var key = Object.keys(message.attributeResults);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.CompleteQueryResponse.AttributeResult.verify(message.attributeResults[key[i]]);
+                                    var error = $root.google.cloud.retail.v2.CompleteQueryResponse.AttributeResult.verify(message.attributeResults[key[i]], long + 1);
                                     if (error)
                                         return "attributeResults." + error;
                                 }
@@ -26117,9 +27215,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CompleteQueryResponse} CompleteQueryResponse
                          */
-                        CompleteQueryResponse.fromObject = function fromObject(object) {
+                        CompleteQueryResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CompleteQueryResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CompleteQueryResponse();
                             if (object.completionResults) {
                                 if (!Array.isArray(object.completionResults))
@@ -26128,7 +27230,7 @@
                                 for (var i = 0; i < object.completionResults.length; ++i) {
                                     if (typeof object.completionResults[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.CompleteQueryResponse.completionResults: object expected");
-                                    message.completionResults[i] = $root.google.cloud.retail.v2.CompleteQueryResponse.CompletionResult.fromObject(object.completionResults[i]);
+                                    message.completionResults[i] = $root.google.cloud.retail.v2.CompleteQueryResponse.CompletionResult.fromObject(object.completionResults[i], long + 1);
                                 }
                             }
                             if (object.attributionToken != null)
@@ -26140,7 +27242,7 @@
                                 for (var i = 0; i < object.recentSearchResults.length; ++i) {
                                     if (typeof object.recentSearchResults[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.CompleteQueryResponse.recentSearchResults: object expected");
-                                    message.recentSearchResults[i] = $root.google.cloud.retail.v2.CompleteQueryResponse.RecentSearchResult.fromObject(object.recentSearchResults[i]);
+                                    message.recentSearchResults[i] = $root.google.cloud.retail.v2.CompleteQueryResponse.RecentSearchResult.fromObject(object.recentSearchResults[i], long + 1);
                                 }
                             }
                             if (object.attributeResults) {
@@ -26148,9 +27250,11 @@
                                     throw TypeError(".google.cloud.retail.v2.CompleteQueryResponse.attributeResults: object expected");
                                 message.attributeResults = {};
                                 for (var keys = Object.keys(object.attributeResults), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributeResults, keys[i]);
                                     if (typeof object.attributeResults[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.CompleteQueryResponse.attributeResults: object expected");
-                                    message.attributeResults[keys[i]] = $root.google.cloud.retail.v2.CompleteQueryResponse.AttributeResult.fromObject(object.attributeResults[keys[i]]);
+                                    message.attributeResults[keys[i]] = $root.google.cloud.retail.v2.CompleteQueryResponse.AttributeResult.fromObject(object.attributeResults[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -26192,8 +27296,11 @@
                             var keys2;
                             if (message.attributeResults && (keys2 = Object.keys(message.attributeResults)).length) {
                                 object.attributeResults = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributeResults, keys2[j]);
                                     object.attributeResults[keys2[j]] = $root.google.cloud.retail.v2.CompleteQueryResponse.AttributeResult.toObject(message.attributeResults[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -26246,7 +27353,7 @@
                                 this.attributes = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -26324,9 +27431,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            CompletionResult.decode = function decode(reader, length, error) {
+                            CompletionResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CompleteQueryResponse.CompletionResult(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -26350,18 +27461,20 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.cloud.retail.v2.CustomAttribute.decode(reader, reader.uint32());
+                                                    value = $root.google.cloud.retail.v2.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.attributes, key);
                                             message.attributes[key] = value;
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -26392,9 +27505,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            CompletionResult.verify = function verify(message) {
+                            CompletionResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.suggestion != null && message.hasOwnProperty("suggestion"))
                                     if (!$util.isString(message.suggestion))
                                         return "suggestion: string expected";
@@ -26403,7 +27520,7 @@
                                         return "attributes: object expected";
                                     var key = Object.keys(message.attributes);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.CustomAttribute.verify(message.attributes[key[i]]);
+                                        var error = $root.google.cloud.retail.v2.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                         if (error)
                                             return "attributes." + error;
                                     }
@@ -26419,9 +27536,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.CompleteQueryResponse.CompletionResult} CompletionResult
                              */
-                            CompletionResult.fromObject = function fromObject(object) {
+                            CompletionResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.CompleteQueryResponse.CompletionResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.CompleteQueryResponse.CompletionResult();
                                 if (object.suggestion != null)
                                     message.suggestion = String(object.suggestion);
@@ -26430,9 +27551,11 @@
                                         throw TypeError(".google.cloud.retail.v2.CompleteQueryResponse.CompletionResult.attributes: object expected");
                                     message.attributes = {};
                                     for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.attributes, keys[i]);
                                         if (typeof object.attributes[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.CompleteQueryResponse.CompletionResult.attributes: object expected");
-                                        message.attributes[keys[i]] = $root.google.cloud.retail.v2.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                        message.attributes[keys[i]] = $root.google.cloud.retail.v2.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                     }
                                 }
                                 return message;
@@ -26460,8 +27583,11 @@
                                 var keys2;
                                 if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                     object.attributes = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.attributes, keys2[j]);
                                         object.attributes[keys2[j]] = $root.google.cloud.retail.v2.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                    }
                                 }
                                 return object;
                             };
@@ -26515,7 +27641,7 @@
                             function RecentSearchResult(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -26580,9 +27706,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RecentSearchResult.decode = function decode(reader, length, error) {
+                            RecentSearchResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CompleteQueryResponse.RecentSearchResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -26594,7 +27724,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -26625,9 +27755,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RecentSearchResult.verify = function verify(message) {
+                            RecentSearchResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.recentSearch != null && message.hasOwnProperty("recentSearch"))
                                     if (!$util.isString(message.recentSearch))
                                         return "recentSearch: string expected";
@@ -26642,9 +27776,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.CompleteQueryResponse.RecentSearchResult} RecentSearchResult
                              */
-                            RecentSearchResult.fromObject = function fromObject(object) {
+                            RecentSearchResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.CompleteQueryResponse.RecentSearchResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.CompleteQueryResponse.RecentSearchResult();
                                 if (object.recentSearch != null)
                                     message.recentSearch = String(object.recentSearch);
@@ -26721,7 +27859,7 @@
                                 this.suggestions = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -26787,9 +27925,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            AttributeResult.decode = function decode(reader, length, error) {
+                            AttributeResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CompleteQueryResponse.AttributeResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -26803,7 +27945,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -26834,9 +27976,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            AttributeResult.verify = function verify(message) {
+                            AttributeResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.suggestions != null && message.hasOwnProperty("suggestions")) {
                                     if (!Array.isArray(message.suggestions))
                                         return "suggestions: array expected";
@@ -26855,9 +28001,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.CompleteQueryResponse.AttributeResult} AttributeResult
                              */
-                            AttributeResult.fromObject = function fromObject(object) {
+                            AttributeResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.CompleteQueryResponse.AttributeResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.CompleteQueryResponse.AttributeResult();
                                 if (object.suggestions) {
                                     if (!Array.isArray(object.suggestions))
@@ -26952,7 +28102,7 @@
                             this.searchSolutionUseCase = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -27090,9 +28240,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Control.decode = function decode(reader, length, error) {
+                        Control.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Control();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -27100,7 +28254,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 4: {
-                                        message.rule = $root.google.cloud.retail.v2.Rule.decode(reader, reader.uint32());
+                                        message.rule = $root.google.cloud.retail.v2.Rule.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
@@ -27140,7 +28294,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -27171,14 +28325,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Control.verify = function verify(message) {
+                        Control.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.rule != null && message.hasOwnProperty("rule")) {
                                 properties.control = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.Rule.verify(message.rule);
+                                    var error = $root.google.cloud.retail.v2.Rule.verify(message.rule, long + 1);
                                     if (error)
                                         return "rule." + error;
                                 }
@@ -27233,14 +28391,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Control} Control
                          */
-                        Control.fromObject = function fromObject(object) {
+                        Control.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Control)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Control();
                             if (object.rule != null) {
                                 if (typeof object.rule !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Control.rule: object expected");
-                                message.rule = $root.google.cloud.retail.v2.Rule.fromObject(object.rule);
+                                message.rule = $root.google.cloud.retail.v2.Rule.fromObject(object.rule, long + 1);
                             }
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -27606,7 +28768,7 @@
                         function CreateControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -27691,9 +28853,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateControlRequest.decode = function decode(reader, length, error) {
+                        CreateControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CreateControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -27705,7 +28871,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.control = $root.google.cloud.retail.v2.Control.decode(reader, reader.uint32());
+                                        message.control = $root.google.cloud.retail.v2.Control.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -27713,7 +28879,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -27744,14 +28910,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateControlRequest.verify = function verify(message) {
+                        CreateControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.control != null && message.hasOwnProperty("control")) {
-                                var error = $root.google.cloud.retail.v2.Control.verify(message.control);
+                                var error = $root.google.cloud.retail.v2.Control.verify(message.control, long + 1);
                                 if (error)
                                     return "control." + error;
                             }
@@ -27769,16 +28939,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CreateControlRequest} CreateControlRequest
                          */
-                        CreateControlRequest.fromObject = function fromObject(object) {
+                        CreateControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CreateControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CreateControlRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.control != null) {
                                 if (typeof object.control !== "object")
                                     throw TypeError(".google.cloud.retail.v2.CreateControlRequest.control: object expected");
-                                message.control = $root.google.cloud.retail.v2.Control.fromObject(object.control);
+                                message.control = $root.google.cloud.retail.v2.Control.fromObject(object.control, long + 1);
                             }
                             if (object.controlId != null)
                                 message.controlId = String(object.controlId);
@@ -27862,7 +29036,7 @@
                         function UpdateControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -27937,9 +29111,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateControlRequest.decode = function decode(reader, length, error) {
+                        UpdateControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UpdateControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -27947,15 +29125,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.control = $root.google.cloud.retail.v2.Control.decode(reader, reader.uint32());
+                                        message.control = $root.google.cloud.retail.v2.Control.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -27986,16 +29164,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateControlRequest.verify = function verify(message) {
+                        UpdateControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.control != null && message.hasOwnProperty("control")) {
-                                var error = $root.google.cloud.retail.v2.Control.verify(message.control);
+                                var error = $root.google.cloud.retail.v2.Control.verify(message.control, long + 1);
                                 if (error)
                                     return "control." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -28010,19 +29192,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UpdateControlRequest} UpdateControlRequest
                          */
-                        UpdateControlRequest.fromObject = function fromObject(object) {
+                        UpdateControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UpdateControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UpdateControlRequest();
                             if (object.control != null) {
                                 if (typeof object.control !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateControlRequest.control: object expected");
-                                message.control = $root.google.cloud.retail.v2.Control.fromObject(object.control);
+                                message.control = $root.google.cloud.retail.v2.Control.fromObject(object.control, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateControlRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -28100,7 +29286,7 @@
                         function DeleteControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -28165,9 +29351,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteControlRequest.decode = function decode(reader, length, error) {
+                        DeleteControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.DeleteControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -28179,7 +29369,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -28210,9 +29400,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteControlRequest.verify = function verify(message) {
+                        DeleteControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -28227,9 +29421,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.DeleteControlRequest} DeleteControlRequest
                          */
-                        DeleteControlRequest.fromObject = function fromObject(object) {
+                        DeleteControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.DeleteControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.DeleteControlRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -28305,7 +29503,7 @@
                         function GetControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -28370,9 +29568,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetControlRequest.decode = function decode(reader, length, error) {
+                        GetControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GetControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -28384,7 +29586,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -28415,9 +29617,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetControlRequest.verify = function verify(message) {
+                        GetControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -28432,9 +29638,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GetControlRequest} GetControlRequest
                          */
-                        GetControlRequest.fromObject = function fromObject(object) {
+                        GetControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GetControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GetControlRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -28513,7 +29723,7 @@
                         function ListControlsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -28608,9 +29818,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListControlsRequest.decode = function decode(reader, length, error) {
+                        ListControlsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListControlsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -28634,7 +29848,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -28665,9 +29879,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListControlsRequest.verify = function verify(message) {
+                        ListControlsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -28691,9 +29909,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListControlsRequest} ListControlsRequest
                          */
-                        ListControlsRequest.fromObject = function fromObject(object) {
+                        ListControlsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListControlsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListControlsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -28787,7 +30009,7 @@
                             this.controls = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -28863,9 +30085,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListControlsResponse.decode = function decode(reader, length, error) {
+                        ListControlsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListControlsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -28875,7 +30101,7 @@
                                 case 1: {
                                         if (!(message.controls && message.controls.length))
                                             message.controls = [];
-                                        message.controls.push($root.google.cloud.retail.v2.Control.decode(reader, reader.uint32()));
+                                        message.controls.push($root.google.cloud.retail.v2.Control.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -28883,7 +30109,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -28914,14 +30140,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListControlsResponse.verify = function verify(message) {
+                        ListControlsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.controls != null && message.hasOwnProperty("controls")) {
                                 if (!Array.isArray(message.controls))
                                     return "controls: array expected";
                                 for (var i = 0; i < message.controls.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Control.verify(message.controls[i]);
+                                    var error = $root.google.cloud.retail.v2.Control.verify(message.controls[i], long + 1);
                                     if (error)
                                         return "controls." + error;
                                 }
@@ -28940,9 +30170,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListControlsResponse} ListControlsResponse
                          */
-                        ListControlsResponse.fromObject = function fromObject(object) {
+                        ListControlsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListControlsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListControlsResponse();
                             if (object.controls) {
                                 if (!Array.isArray(object.controls))
@@ -28951,7 +30185,7 @@
                                 for (var i = 0; i < object.controls.length; ++i) {
                                     if (typeof object.controls[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ListControlsResponse.controls: object expected");
-                                    message.controls[i] = $root.google.cloud.retail.v2.Control.fromObject(object.controls[i]);
+                                    message.controls[i] = $root.google.cloud.retail.v2.Control.fromObject(object.controls[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -29116,7 +30350,7 @@
                             this.safetySettings = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -29284,9 +30518,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ConversationalSearchRequest.decode = function decode(reader, length, error) {
+                        ConversationalSearchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchRequest(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -29316,7 +30554,7 @@
                                         break;
                                     }
                                 case 6: {
-                                        message.searchParams = $root.google.cloud.retail.v2.ConversationalSearchRequest.SearchParams.decode(reader, reader.uint32());
+                                        message.searchParams = $root.google.cloud.retail.v2.ConversationalSearchRequest.SearchParams.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
@@ -29324,11 +30562,11 @@
                                         break;
                                     }
                                 case 7: {
-                                        message.userInfo = $root.google.cloud.retail.v2.UserInfo.decode(reader, reader.uint32());
+                                        message.userInfo = $root.google.cloud.retail.v2.UserInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.conversationalFilteringSpec = $root.google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec.decode(reader, reader.uint32());
+                                        message.conversationalFilteringSpec = $root.google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 12: {
@@ -29347,21 +30585,23 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.userLabels, key);
                                         message.userLabels[key] = value;
                                         break;
                                     }
                                 case 14: {
                                         if (!(message.safetySettings && message.safetySettings.length))
                                             message.safetySettings = [];
-                                        message.safetySettings.push($root.google.cloud.retail.v2.SafetySetting.decode(reader, reader.uint32()));
+                                        message.safetySettings.push($root.google.cloud.retail.v2.SafetySetting.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -29392,9 +30632,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ConversationalSearchRequest.verify = function verify(message) {
+                        ConversationalSearchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.placement != null && message.hasOwnProperty("placement"))
                                 if (!$util.isString(message.placement))
                                     return "placement: string expected";
@@ -29415,7 +30659,7 @@
                                 if (!$util.isString(message.conversationId))
                                     return "conversationId: string expected";
                             if (message.searchParams != null && message.hasOwnProperty("searchParams")) {
-                                var error = $root.google.cloud.retail.v2.ConversationalSearchRequest.SearchParams.verify(message.searchParams);
+                                var error = $root.google.cloud.retail.v2.ConversationalSearchRequest.SearchParams.verify(message.searchParams, long + 1);
                                 if (error)
                                     return "searchParams." + error;
                             }
@@ -29423,12 +30667,12 @@
                                 if (!$util.isString(message.visitorId))
                                     return "visitorId: string expected";
                             if (message.userInfo != null && message.hasOwnProperty("userInfo")) {
-                                var error = $root.google.cloud.retail.v2.UserInfo.verify(message.userInfo);
+                                var error = $root.google.cloud.retail.v2.UserInfo.verify(message.userInfo, long + 1);
                                 if (error)
                                     return "userInfo." + error;
                             }
                             if (message.conversationalFilteringSpec != null && message.hasOwnProperty("conversationalFilteringSpec")) {
-                                var error = $root.google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec.verify(message.conversationalFilteringSpec);
+                                var error = $root.google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec.verify(message.conversationalFilteringSpec, long + 1);
                                 if (error)
                                     return "conversationalFilteringSpec." + error;
                             }
@@ -29444,7 +30688,7 @@
                                 if (!Array.isArray(message.safetySettings))
                                     return "safetySettings: array expected";
                                 for (var i = 0; i < message.safetySettings.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.SafetySetting.verify(message.safetySettings[i]);
+                                    var error = $root.google.cloud.retail.v2.SafetySetting.verify(message.safetySettings[i], long + 1);
                                     if (error)
                                         return "safetySettings." + error;
                                 }
@@ -29460,9 +30704,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ConversationalSearchRequest} ConversationalSearchRequest
                          */
-                        ConversationalSearchRequest.fromObject = function fromObject(object) {
+                        ConversationalSearchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ConversationalSearchRequest();
                             if (object.placement != null)
                                 message.placement = String(object.placement);
@@ -29482,26 +30730,29 @@
                             if (object.searchParams != null) {
                                 if (typeof object.searchParams !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ConversationalSearchRequest.searchParams: object expected");
-                                message.searchParams = $root.google.cloud.retail.v2.ConversationalSearchRequest.SearchParams.fromObject(object.searchParams);
+                                message.searchParams = $root.google.cloud.retail.v2.ConversationalSearchRequest.SearchParams.fromObject(object.searchParams, long + 1);
                             }
                             if (object.visitorId != null)
                                 message.visitorId = String(object.visitorId);
                             if (object.userInfo != null) {
                                 if (typeof object.userInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ConversationalSearchRequest.userInfo: object expected");
-                                message.userInfo = $root.google.cloud.retail.v2.UserInfo.fromObject(object.userInfo);
+                                message.userInfo = $root.google.cloud.retail.v2.UserInfo.fromObject(object.userInfo, long + 1);
                             }
                             if (object.conversationalFilteringSpec != null) {
                                 if (typeof object.conversationalFilteringSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ConversationalSearchRequest.conversationalFilteringSpec: object expected");
-                                message.conversationalFilteringSpec = $root.google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec.fromObject(object.conversationalFilteringSpec);
+                                message.conversationalFilteringSpec = $root.google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec.fromObject(object.conversationalFilteringSpec, long + 1);
                             }
                             if (object.userLabels) {
                                 if (typeof object.userLabels !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ConversationalSearchRequest.userLabels: object expected");
                                 message.userLabels = {};
-                                for (var keys = Object.keys(object.userLabels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.userLabels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.userLabels, keys[i]);
                                     message.userLabels[keys[i]] = String(object.userLabels[keys[i]]);
+                                }
                             }
                             if (object.safetySettings) {
                                 if (!Array.isArray(object.safetySettings))
@@ -29510,7 +30761,7 @@
                                 for (var i = 0; i < object.safetySettings.length; ++i) {
                                     if (typeof object.safetySettings[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ConversationalSearchRequest.safetySettings: object expected");
-                                    message.safetySettings[i] = $root.google.cloud.retail.v2.SafetySetting.fromObject(object.safetySettings[i]);
+                                    message.safetySettings[i] = $root.google.cloud.retail.v2.SafetySetting.fromObject(object.safetySettings[i], long + 1);
                                 }
                             }
                             return message;
@@ -29569,8 +30820,11 @@
                             var keys2;
                             if (message.userLabels && (keys2 = Object.keys(message.userLabels)).length) {
                                 object.userLabels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.userLabels, keys2[j]);
                                     object.userLabels[keys2[j]] = message.userLabels[keys2[j]];
+                                }
                             }
                             if (message.safetySettings && message.safetySettings.length) {
                                 object.safetySettings = [];
@@ -29629,7 +30883,7 @@
                             function SearchParams(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -29724,9 +30978,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SearchParams.decode = function decode(reader, length, error) {
+                            SearchParams.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchRequest.SearchParams();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -29746,11 +31004,11 @@
                                             break;
                                         }
                                     case 4: {
-                                            message.boostSpec = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.decode(reader, reader.uint32());
+                                            message.boostSpec = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -29781,9 +31039,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SearchParams.verify = function verify(message) {
+                            SearchParams.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.filter != null && message.hasOwnProperty("filter"))
                                     if (!$util.isString(message.filter))
                                         return "filter: string expected";
@@ -29794,7 +31056,7 @@
                                     if (!$util.isString(message.sortBy))
                                         return "sortBy: string expected";
                                 if (message.boostSpec != null && message.hasOwnProperty("boostSpec")) {
-                                    var error = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.verify(message.boostSpec);
+                                    var error = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.verify(message.boostSpec, long + 1);
                                     if (error)
                                         return "boostSpec." + error;
                                 }
@@ -29809,9 +31071,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.ConversationalSearchRequest.SearchParams} SearchParams
                              */
-                            SearchParams.fromObject = function fromObject(object) {
+                            SearchParams.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchRequest.SearchParams)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.ConversationalSearchRequest.SearchParams();
                                 if (object.filter != null)
                                     message.filter = String(object.filter);
@@ -29822,7 +31088,7 @@
                                 if (object.boostSpec != null) {
                                     if (typeof object.boostSpec !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ConversationalSearchRequest.SearchParams.boostSpec: object expected");
-                                    message.boostSpec = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.fromObject(object.boostSpec);
+                                    message.boostSpec = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.fromObject(object.boostSpec, long + 1);
                                 }
                                 return message;
                             };
@@ -29907,7 +31173,7 @@
                             function UserAnswer(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -29996,9 +31262,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            UserAnswer.decode = function decode(reader, length, error) {
+                            UserAnswer.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -30010,11 +31280,11 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.selectedAnswer = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer.decode(reader, reader.uint32());
+                                            message.selectedAnswer = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -30045,9 +31315,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            UserAnswer.verify = function verify(message) {
+                            UserAnswer.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.textAnswer != null && message.hasOwnProperty("textAnswer")) {
                                     properties.type = 1;
@@ -30059,7 +31333,7 @@
                                         return "type: multiple values";
                                     properties.type = 1;
                                     {
-                                        var error = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer.verify(message.selectedAnswer);
+                                        var error = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer.verify(message.selectedAnswer, long + 1);
                                         if (error)
                                             return "selectedAnswer." + error;
                                     }
@@ -30075,16 +31349,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer} UserAnswer
                              */
-                            UserAnswer.fromObject = function fromObject(object) {
+                            UserAnswer.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer();
                                 if (object.textAnswer != null)
                                     message.textAnswer = String(object.textAnswer);
                                 if (object.selectedAnswer != null) {
                                     if (typeof object.selectedAnswer !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.selectedAnswer: object expected");
-                                    message.selectedAnswer = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer);
+                                    message.selectedAnswer = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer, long + 1);
                                 }
                                 return message;
                             };
@@ -30161,7 +31439,7 @@
                                 function SelectedAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -30226,9 +31504,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                SelectedAnswer.decode = function decode(reader, length, error) {
+                                SelectedAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -30236,11 +31518,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -30271,11 +31553,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                SelectedAnswer.verify = function verify(message) {
+                                SelectedAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -30290,14 +31576,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer} SelectedAnswer
                                  */
-                                SelectedAnswer.fromObject = function fromObject(object) {
+                                SelectedAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.SelectedAnswer.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -30376,7 +31666,7 @@
                             function ConversationalFilteringSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -30461,9 +31751,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalFilteringSpec.decode = function decode(reader, length, error) {
+                            ConversationalFilteringSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -30475,7 +31769,7 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.userAnswer = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.decode(reader, reader.uint32());
+                                            message.userAnswer = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 4: {
@@ -30483,7 +31777,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -30514,14 +31808,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalFilteringSpec.verify = function verify(message) {
+                            ConversationalFilteringSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.enableConversationalFiltering != null && message.hasOwnProperty("enableConversationalFiltering"))
                                     if (typeof message.enableConversationalFiltering !== "boolean")
                                         return "enableConversationalFiltering: boolean expected";
                                 if (message.userAnswer != null && message.hasOwnProperty("userAnswer")) {
-                                    var error = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.verify(message.userAnswer);
+                                    var error = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.verify(message.userAnswer, long + 1);
                                     if (error)
                                         return "userAnswer." + error;
                                 }
@@ -30546,16 +31844,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec} ConversationalFilteringSpec
                              */
-                            ConversationalFilteringSpec.fromObject = function fromObject(object) {
+                            ConversationalFilteringSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec();
                                 if (object.enableConversationalFiltering != null)
                                     message.enableConversationalFiltering = Boolean(object.enableConversationalFiltering);
                                 if (object.userAnswer != null) {
                                     if (typeof object.userAnswer !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ConversationalSearchRequest.ConversationalFilteringSpec.userAnswer: object expected");
-                                    message.userAnswer = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.fromObject(object.userAnswer);
+                                    message.userAnswer = $root.google.cloud.retail.v2.ConversationalSearchRequest.UserAnswer.fromObject(object.userAnswer, long + 1);
                                 }
                                 switch (object.conversationalFilteringMode) {
                                 default:
@@ -30689,7 +31991,7 @@
                             this.refinedSearch = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -30816,9 +32118,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ConversationalSearchResponse.decode = function decode(reader, length, error) {
+                        ConversationalSearchResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -30836,7 +32142,7 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.followupQuestion = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32());
+                                        message.followupQuestion = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
@@ -30846,11 +32152,11 @@
                                 case 6: {
                                         if (!(message.refinedSearch && message.refinedSearch.length))
                                             message.refinedSearch = [];
-                                        message.refinedSearch.push($root.google.cloud.retail.v2.ConversationalSearchResponse.RefinedSearch.decode(reader, reader.uint32()));
+                                        message.refinedSearch.push($root.google.cloud.retail.v2.ConversationalSearchResponse.RefinedSearch.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 7: {
-                                        message.conversationalFilteringResult = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.decode(reader, reader.uint32());
+                                        message.conversationalFilteringResult = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
@@ -30858,7 +32164,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -30889,9 +32195,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ConversationalSearchResponse.verify = function verify(message) {
+                        ConversationalSearchResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.userQueryTypes != null && message.hasOwnProperty("userQueryTypes")) {
                                 if (!Array.isArray(message.userQueryTypes))
                                     return "userQueryTypes: array expected";
@@ -30903,7 +32213,7 @@
                                 if (!$util.isString(message.conversationalTextResponse))
                                     return "conversationalTextResponse: string expected";
                             if (message.followupQuestion != null && message.hasOwnProperty("followupQuestion")) {
-                                var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion);
+                                var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion, long + 1);
                                 if (error)
                                     return "followupQuestion." + error;
                             }
@@ -30914,13 +32224,13 @@
                                 if (!Array.isArray(message.refinedSearch))
                                     return "refinedSearch: array expected";
                                 for (var i = 0; i < message.refinedSearch.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.RefinedSearch.verify(message.refinedSearch[i]);
+                                    var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.RefinedSearch.verify(message.refinedSearch[i], long + 1);
                                     if (error)
                                         return "refinedSearch." + error;
                                 }
                             }
                             if (message.conversationalFilteringResult != null && message.hasOwnProperty("conversationalFilteringResult")) {
-                                var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.verify(message.conversationalFilteringResult);
+                                var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.verify(message.conversationalFilteringResult, long + 1);
                                 if (error)
                                     return "conversationalFilteringResult." + error;
                             }
@@ -30944,9 +32254,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ConversationalSearchResponse} ConversationalSearchResponse
                          */
-                        ConversationalSearchResponse.fromObject = function fromObject(object) {
+                        ConversationalSearchResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ConversationalSearchResponse();
                             if (object.userQueryTypes) {
                                 if (!Array.isArray(object.userQueryTypes))
@@ -30960,7 +32274,7 @@
                             if (object.followupQuestion != null) {
                                 if (typeof object.followupQuestion !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ConversationalSearchResponse.followupQuestion: object expected");
-                                message.followupQuestion = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion);
+                                message.followupQuestion = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion, long + 1);
                             }
                             if (object.conversationId != null)
                                 message.conversationId = String(object.conversationId);
@@ -30971,13 +32285,13 @@
                                 for (var i = 0; i < object.refinedSearch.length; ++i) {
                                     if (typeof object.refinedSearch[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ConversationalSearchResponse.refinedSearch: object expected");
-                                    message.refinedSearch[i] = $root.google.cloud.retail.v2.ConversationalSearchResponse.RefinedSearch.fromObject(object.refinedSearch[i]);
+                                    message.refinedSearch[i] = $root.google.cloud.retail.v2.ConversationalSearchResponse.RefinedSearch.fromObject(object.refinedSearch[i], long + 1);
                                 }
                             }
                             if (object.conversationalFilteringResult != null) {
                                 if (typeof object.conversationalFilteringResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ConversationalSearchResponse.conversationalFilteringResult: object expected");
-                                message.conversationalFilteringResult = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.fromObject(object.conversationalFilteringResult);
+                                message.conversationalFilteringResult = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.fromObject(object.conversationalFilteringResult, long + 1);
                             }
                             switch (object.state) {
                             default:
@@ -31097,7 +32411,7 @@
                                 this.suggestedAnswers = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -31173,9 +32487,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FollowupQuestion.decode = function decode(reader, length, error) {
+                            FollowupQuestion.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -31189,11 +32507,11 @@
                                     case 2: {
                                             if (!(message.suggestedAnswers && message.suggestedAnswers.length))
                                                 message.suggestedAnswers = [];
-                                            message.suggestedAnswers.push($root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.decode(reader, reader.uint32()));
+                                            message.suggestedAnswers.push($root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -31224,9 +32542,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FollowupQuestion.verify = function verify(message) {
+                            FollowupQuestion.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.followupQuestion != null && message.hasOwnProperty("followupQuestion"))
                                     if (!$util.isString(message.followupQuestion))
                                         return "followupQuestion: string expected";
@@ -31234,7 +32556,7 @@
                                     if (!Array.isArray(message.suggestedAnswers))
                                         return "suggestedAnswers: array expected";
                                     for (var i = 0; i < message.suggestedAnswers.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.verify(message.suggestedAnswers[i]);
+                                        var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.verify(message.suggestedAnswers[i], long + 1);
                                         if (error)
                                             return "suggestedAnswers." + error;
                                     }
@@ -31250,9 +32572,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion} FollowupQuestion
                              */
-                            FollowupQuestion.fromObject = function fromObject(object) {
+                            FollowupQuestion.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion();
                                 if (object.followupQuestion != null)
                                     message.followupQuestion = String(object.followupQuestion);
@@ -31263,7 +32589,7 @@
                                     for (var i = 0; i < object.suggestedAnswers.length; ++i) {
                                         if (typeof object.suggestedAnswers[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.suggestedAnswers: object expected");
-                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.fromObject(object.suggestedAnswers[i]);
+                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.fromObject(object.suggestedAnswers[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -31342,7 +32668,7 @@
                                 function SuggestedAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -31407,9 +32733,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                SuggestedAnswer.decode = function decode(reader, length, error) {
+                                SuggestedAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -31417,11 +32747,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -31452,11 +32782,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                SuggestedAnswer.verify = function verify(message) {
+                                SuggestedAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -31471,14 +32805,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer} SuggestedAnswer
                                  */
-                                SuggestedAnswer.fromObject = function fromObject(object) {
+                                SuggestedAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -31555,7 +32893,7 @@
                             function RefinedSearch(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -31620,9 +32958,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RefinedSearch.decode = function decode(reader, length, error) {
+                            RefinedSearch.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchResponse.RefinedSearch();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -31634,7 +32976,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -31665,9 +33007,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RefinedSearch.verify = function verify(message) {
+                            RefinedSearch.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.query != null && message.hasOwnProperty("query"))
                                     if (!$util.isString(message.query))
                                         return "query: string expected";
@@ -31682,9 +33028,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.ConversationalSearchResponse.RefinedSearch} RefinedSearch
                              */
-                            RefinedSearch.fromObject = function fromObject(object) {
+                            RefinedSearch.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchResponse.RefinedSearch)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.ConversationalSearchResponse.RefinedSearch();
                                 if (object.query != null)
                                     message.query = String(object.query);
@@ -31761,7 +33111,7 @@
                             function ConversationalFilteringResult(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -31836,9 +33186,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalFilteringResult.decode = function decode(reader, length, error) {
+                            ConversationalFilteringResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -31846,15 +33200,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.followupQuestion = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32());
+                                            message.followupQuestion = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.additionalFilter = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.decode(reader, reader.uint32());
+                                            message.additionalFilter = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -31885,16 +33239,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalFilteringResult.verify = function verify(message) {
+                            ConversationalFilteringResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.followupQuestion != null && message.hasOwnProperty("followupQuestion")) {
-                                    var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion);
+                                    var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion, long + 1);
                                     if (error)
                                         return "followupQuestion." + error;
                                 }
                                 if (message.additionalFilter != null && message.hasOwnProperty("additionalFilter")) {
-                                    var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.verify(message.additionalFilter);
+                                    var error = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.verify(message.additionalFilter, long + 1);
                                     if (error)
                                         return "additionalFilter." + error;
                                 }
@@ -31909,19 +33267,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult} ConversationalFilteringResult
                              */
-                            ConversationalFilteringResult.fromObject = function fromObject(object) {
+                            ConversationalFilteringResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult();
                                 if (object.followupQuestion != null) {
                                     if (typeof object.followupQuestion !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.followupQuestion: object expected");
-                                    message.followupQuestion = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion);
+                                    message.followupQuestion = $root.google.cloud.retail.v2.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion, long + 1);
                                 }
                                 if (object.additionalFilter != null) {
                                     if (typeof object.additionalFilter !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.additionalFilter: object expected");
-                                    message.additionalFilter = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.fromObject(object.additionalFilter);
+                                    message.additionalFilter = $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.fromObject(object.additionalFilter, long + 1);
                                 }
                                 return message;
                             };
@@ -31996,7 +33358,7 @@
                                 function AdditionalFilter(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -32061,9 +33423,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                AdditionalFilter.decode = function decode(reader, length, error) {
+                                AdditionalFilter.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -32071,11 +33437,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -32106,11 +33472,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                AdditionalFilter.verify = function verify(message) {
+                                AdditionalFilter.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -32125,14 +33495,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter} AdditionalFilter
                                  */
-                                AdditionalFilter.fromObject = function fromObject(object) {
+                                AdditionalFilter.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -32252,7 +33626,7 @@
                         function SafetySetting(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -32337,9 +33711,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SafetySetting.decode = function decode(reader, length, error) {
+                        SafetySetting.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SafetySetting();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -32359,7 +33737,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -32390,9 +33768,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SafetySetting.verify = function verify(message) {
+                        SafetySetting.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.category != null && message.hasOwnProperty("category"))
                                 switch (message.category) {
                                 default:
@@ -32437,9 +33819,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.SafetySetting} SafetySetting
                          */
-                        SafetySetting.fromObject = function fromObject(object) {
+                        SafetySetting.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.SafetySetting)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.SafetySetting();
                             switch (object.category) {
                             default:
@@ -32711,7 +34097,7 @@
                         function ProductAttributeValue(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -32786,9 +34172,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductAttributeValue.decode = function decode(reader, length, error) {
+                        ProductAttributeValue.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ProductAttributeValue();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -32804,7 +34194,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -32835,9 +34225,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductAttributeValue.verify = function verify(message) {
+                        ProductAttributeValue.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -32855,9 +34249,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ProductAttributeValue} ProductAttributeValue
                          */
-                        ProductAttributeValue.fromObject = function fromObject(object) {
+                        ProductAttributeValue.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ProductAttributeValue)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ProductAttributeValue();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -32940,7 +34338,7 @@
                         function ProductAttributeInterval(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -33015,9 +34413,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductAttributeInterval.decode = function decode(reader, length, error) {
+                        ProductAttributeInterval.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ProductAttributeInterval();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -33029,11 +34431,11 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.interval = $root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32());
+                                        message.interval = $root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -33064,14 +34466,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductAttributeInterval.verify = function verify(message) {
+                        ProductAttributeInterval.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
                             if (message.interval != null && message.hasOwnProperty("interval")) {
-                                var error = $root.google.cloud.retail.v2.Interval.verify(message.interval);
+                                var error = $root.google.cloud.retail.v2.Interval.verify(message.interval, long + 1);
                                 if (error)
                                     return "interval." + error;
                             }
@@ -33086,16 +34492,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ProductAttributeInterval} ProductAttributeInterval
                          */
-                        ProductAttributeInterval.fromObject = function fromObject(object) {
+                        ProductAttributeInterval.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ProductAttributeInterval)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ProductAttributeInterval();
                             if (object.name != null)
                                 message.name = String(object.name);
                             if (object.interval != null) {
                                 if (typeof object.interval !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ProductAttributeInterval.interval: object expected");
-                                message.interval = $root.google.cloud.retail.v2.Interval.fromObject(object.interval);
+                                message.interval = $root.google.cloud.retail.v2.Interval.fromObject(object.interval, long + 1);
                             }
                             return message;
                         };
@@ -33175,7 +34585,7 @@
                         function Tile(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -33274,9 +34684,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Tile.decode = function decode(reader, length, error) {
+                        Tile.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Tile();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -33284,11 +34698,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32());
+                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.productAttributeInterval = $root.google.cloud.retail.v2.ProductAttributeInterval.decode(reader, reader.uint32());
+                                        message.productAttributeInterval = $root.google.cloud.retail.v2.ProductAttributeInterval.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -33296,7 +34710,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -33327,14 +34741,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Tile.verify = function verify(message) {
+                        Tile.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
                                 properties.productAttribute = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue);
+                                    var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                     if (error)
                                         return "productAttributeValue." + error;
                                 }
@@ -33344,7 +34762,7 @@
                                     return "productAttribute: multiple values";
                                 properties.productAttribute = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.ProductAttributeInterval.verify(message.productAttributeInterval);
+                                    var error = $root.google.cloud.retail.v2.ProductAttributeInterval.verify(message.productAttributeInterval, long + 1);
                                     if (error)
                                         return "productAttributeInterval." + error;
                                 }
@@ -33363,19 +34781,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Tile} Tile
                          */
-                        Tile.fromObject = function fromObject(object) {
+                        Tile.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Tile)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Tile();
                             if (object.productAttributeValue != null) {
                                 if (typeof object.productAttributeValue !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Tile.productAttributeValue: object expected");
-                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                             }
                             if (object.productAttributeInterval != null) {
                                 if (typeof object.productAttributeInterval !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Tile.productAttributeInterval: object expected");
-                                message.productAttributeInterval = $root.google.cloud.retail.v2.ProductAttributeInterval.fromObject(object.productAttributeInterval);
+                                message.productAttributeInterval = $root.google.cloud.retail.v2.ProductAttributeInterval.fromObject(object.productAttributeInterval, long + 1);
                             }
                             if (object.representativeProductId != null)
                                 message.representativeProductId = String(object.representativeProductId);
@@ -33493,7 +34915,7 @@
                             this.userAttributes = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -33844,9 +35266,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchRequest.decode = function decode(reader, length, error) {
+                        SearchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -33870,7 +35296,7 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.userInfo = $root.google.cloud.retail.v2.UserInfo.decode(reader, reader.uint32());
+                                        message.userInfo = $root.google.cloud.retail.v2.UserInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -33900,19 +35326,19 @@
                                 case 12: {
                                         if (!(message.facetSpecs && message.facetSpecs.length))
                                             message.facetSpecs = [];
-                                        message.facetSpecs.push($root.google.cloud.retail.v2.SearchRequest.FacetSpec.decode(reader, reader.uint32()));
+                                        message.facetSpecs.push($root.google.cloud.retail.v2.SearchRequest.FacetSpec.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 21: {
-                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32());
+                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
-                                        message.boostSpec = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.decode(reader, reader.uint32());
+                                        message.boostSpec = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
-                                        message.queryExpansionSpec = $root.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.decode(reader, reader.uint32());
+                                        message.queryExpansionSpec = $root.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 17: {
@@ -33932,7 +35358,7 @@
                                         break;
                                     }
                                 case 32: {
-                                        message.personalizationSpec = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32());
+                                        message.personalizationSpec = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 34: {
@@ -33951,15 +35377,17 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
                                 case 35: {
-                                        message.spellCorrectionSpec = $root.google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.decode(reader, reader.uint32());
+                                        message.spellCorrectionSpec = $root.google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 38: {
@@ -33967,11 +35395,11 @@
                                         break;
                                     }
                                 case 40: {
-                                        message.conversationalSearchSpec = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.decode(reader, reader.uint32());
+                                        message.conversationalSearchSpec = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 41: {
-                                        message.tileNavigationSpec = $root.google.cloud.retail.v2.SearchRequest.TileNavigationSpec.decode(reader, reader.uint32());
+                                        message.tileNavigationSpec = $root.google.cloud.retail.v2.SearchRequest.TileNavigationSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 43: {
@@ -33999,18 +35427,20 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2.StringList.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2.StringList.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.userAttributes, key);
                                         message.userAttributes[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -34041,9 +35471,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchRequest.verify = function verify(message) {
+                        SearchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.placement != null && message.hasOwnProperty("placement"))
                                 if (!$util.isString(message.placement))
@@ -34058,7 +35492,7 @@
                                 if (!$util.isString(message.visitorId))
                                     return "visitorId: string expected";
                             if (message.userInfo != null && message.hasOwnProperty("userInfo")) {
-                                var error = $root.google.cloud.retail.v2.UserInfo.verify(message.userInfo);
+                                var error = $root.google.cloud.retail.v2.UserInfo.verify(message.userInfo, long + 1);
                                 if (error)
                                     return "userInfo." + error;
                             }
@@ -34084,23 +35518,23 @@
                                 if (!Array.isArray(message.facetSpecs))
                                     return "facetSpecs: array expected";
                                 for (var i = 0; i < message.facetSpecs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.SearchRequest.FacetSpec.verify(message.facetSpecs[i]);
+                                    var error = $root.google.cloud.retail.v2.SearchRequest.FacetSpec.verify(message.facetSpecs[i], long + 1);
                                     if (error)
                                         return "facetSpecs." + error;
                                 }
                             }
                             if (message.dynamicFacetSpec != null && message.hasOwnProperty("dynamicFacetSpec")) {
-                                var error = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec);
+                                var error = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec, long + 1);
                                 if (error)
                                     return "dynamicFacetSpec." + error;
                             }
                             if (message.boostSpec != null && message.hasOwnProperty("boostSpec")) {
-                                var error = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.verify(message.boostSpec);
+                                var error = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.verify(message.boostSpec, long + 1);
                                 if (error)
                                     return "boostSpec." + error;
                             }
                             if (message.queryExpansionSpec != null && message.hasOwnProperty("queryExpansionSpec")) {
-                                var error = $root.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.verify(message.queryExpansionSpec);
+                                var error = $root.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.verify(message.queryExpansionSpec, long + 1);
                                 if (error)
                                     return "queryExpansionSpec." + error;
                             }
@@ -34128,7 +35562,7 @@
                                     break;
                                 }
                             if (message.personalizationSpec != null && message.hasOwnProperty("personalizationSpec")) {
-                                var error = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec);
+                                var error = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec, long + 1);
                                 if (error)
                                     return "personalizationSpec." + error;
                             }
@@ -34143,7 +35577,7 @@
                             if (message.spellCorrectionSpec != null && message.hasOwnProperty("spellCorrectionSpec")) {
                                 properties._spellCorrectionSpec = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.verify(message.spellCorrectionSpec);
+                                    var error = $root.google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.verify(message.spellCorrectionSpec, long + 1);
                                     if (error)
                                         return "spellCorrectionSpec." + error;
                                 }
@@ -34152,12 +35586,12 @@
                                 if (!$util.isString(message.entity))
                                     return "entity: string expected";
                             if (message.conversationalSearchSpec != null && message.hasOwnProperty("conversationalSearchSpec")) {
-                                var error = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.verify(message.conversationalSearchSpec);
+                                var error = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.verify(message.conversationalSearchSpec, long + 1);
                                 if (error)
                                     return "conversationalSearchSpec." + error;
                             }
                             if (message.tileNavigationSpec != null && message.hasOwnProperty("tileNavigationSpec")) {
-                                var error = $root.google.cloud.retail.v2.SearchRequest.TileNavigationSpec.verify(message.tileNavigationSpec);
+                                var error = $root.google.cloud.retail.v2.SearchRequest.TileNavigationSpec.verify(message.tileNavigationSpec, long + 1);
                                 if (error)
                                     return "tileNavigationSpec." + error;
                             }
@@ -34175,7 +35609,7 @@
                                     return "userAttributes: object expected";
                                 var key = Object.keys(message.userAttributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.StringList.verify(message.userAttributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2.StringList.verify(message.userAttributes[key[i]], long + 1);
                                     if (error)
                                         return "userAttributes." + error;
                                 }
@@ -34191,9 +35625,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.SearchRequest} SearchRequest
                          */
-                        SearchRequest.fromObject = function fromObject(object) {
+                        SearchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.SearchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.SearchRequest();
                             if (object.placement != null)
                                 message.placement = String(object.placement);
@@ -34206,7 +35644,7 @@
                             if (object.userInfo != null) {
                                 if (typeof object.userInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.userInfo: object expected");
-                                message.userInfo = $root.google.cloud.retail.v2.UserInfo.fromObject(object.userInfo);
+                                message.userInfo = $root.google.cloud.retail.v2.UserInfo.fromObject(object.userInfo, long + 1);
                             }
                             if (object.pageSize != null)
                                 message.pageSize = object.pageSize | 0;
@@ -34227,23 +35665,23 @@
                                 for (var i = 0; i < object.facetSpecs.length; ++i) {
                                     if (typeof object.facetSpecs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.SearchRequest.facetSpecs: object expected");
-                                    message.facetSpecs[i] = $root.google.cloud.retail.v2.SearchRequest.FacetSpec.fromObject(object.facetSpecs[i]);
+                                    message.facetSpecs[i] = $root.google.cloud.retail.v2.SearchRequest.FacetSpec.fromObject(object.facetSpecs[i], long + 1);
                                 }
                             }
                             if (object.dynamicFacetSpec != null) {
                                 if (typeof object.dynamicFacetSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.dynamicFacetSpec: object expected");
-                                message.dynamicFacetSpec = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec);
+                                message.dynamicFacetSpec = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec, long + 1);
                             }
                             if (object.boostSpec != null) {
                                 if (typeof object.boostSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.boostSpec: object expected");
-                                message.boostSpec = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.fromObject(object.boostSpec);
+                                message.boostSpec = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.fromObject(object.boostSpec, long + 1);
                             }
                             if (object.queryExpansionSpec != null) {
                                 if (typeof object.queryExpansionSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.queryExpansionSpec: object expected");
-                                message.queryExpansionSpec = $root.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.fromObject(object.queryExpansionSpec);
+                                message.queryExpansionSpec = $root.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.fromObject(object.queryExpansionSpec, long + 1);
                             }
                             if (object.variantRollupKeys) {
                                 if (!Array.isArray(object.variantRollupKeys))
@@ -34282,31 +35720,34 @@
                             if (object.personalizationSpec != null) {
                                 if (typeof object.personalizationSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.personalizationSpec: object expected");
-                                message.personalizationSpec = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec);
+                                message.personalizationSpec = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec, long + 1);
                             }
                             if (object.labels) {
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.spellCorrectionSpec != null) {
                                 if (typeof object.spellCorrectionSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.spellCorrectionSpec: object expected");
-                                message.spellCorrectionSpec = $root.google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.fromObject(object.spellCorrectionSpec);
+                                message.spellCorrectionSpec = $root.google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.fromObject(object.spellCorrectionSpec, long + 1);
                             }
                             if (object.entity != null)
                                 message.entity = String(object.entity);
                             if (object.conversationalSearchSpec != null) {
                                 if (typeof object.conversationalSearchSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.conversationalSearchSpec: object expected");
-                                message.conversationalSearchSpec = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.fromObject(object.conversationalSearchSpec);
+                                message.conversationalSearchSpec = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.fromObject(object.conversationalSearchSpec, long + 1);
                             }
                             if (object.tileNavigationSpec != null) {
                                 if (typeof object.tileNavigationSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.tileNavigationSpec: object expected");
-                                message.tileNavigationSpec = $root.google.cloud.retail.v2.SearchRequest.TileNavigationSpec.fromObject(object.tileNavigationSpec);
+                                message.tileNavigationSpec = $root.google.cloud.retail.v2.SearchRequest.TileNavigationSpec.fromObject(object.tileNavigationSpec, long + 1);
                             }
                             if (object.languageCode != null)
                                 message.languageCode = String(object.languageCode);
@@ -34319,9 +35760,11 @@
                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.userAttributes: object expected");
                                 message.userAttributes = {};
                                 for (var keys = Object.keys(object.userAttributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.userAttributes, keys[i]);
                                     if (typeof object.userAttributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.SearchRequest.userAttributes: object expected");
-                                    message.userAttributes[keys[i]] = $root.google.cloud.retail.v2.StringList.fromObject(object.userAttributes[keys[i]]);
+                                    message.userAttributes[keys[i]] = $root.google.cloud.retail.v2.StringList.fromObject(object.userAttributes[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -34423,8 +35866,11 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.spellCorrectionSpec != null && message.hasOwnProperty("spellCorrectionSpec")) {
                                 object.spellCorrectionSpec = $root.google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.toObject(message.spellCorrectionSpec, options);
@@ -34445,8 +35891,11 @@
                                 object.placeId = message.placeId;
                             if (message.userAttributes && (keys2 = Object.keys(message.userAttributes)).length) {
                                 object.userAttributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.userAttributes, keys2[j]);
                                     object.userAttributes[keys2[j]] = $root.google.cloud.retail.v2.StringList.toObject(message.userAttributes[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -34501,7 +35950,7 @@
                                 this.excludedFilterKeys = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -34597,9 +36046,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FacetSpec.decode = function decode(reader, length, error) {
+                            FacetSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.FacetSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -34607,7 +36060,7 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.facetKey = $root.google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.decode(reader, reader.uint32());
+                                            message.facetKey = $root.google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
@@ -34625,7 +36078,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -34656,11 +36109,15 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FacetSpec.verify = function verify(message) {
+                            FacetSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.facetKey != null && message.hasOwnProperty("facetKey")) {
-                                    var error = $root.google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.verify(message.facetKey);
+                                    var error = $root.google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.verify(message.facetKey, long + 1);
                                     if (error)
                                         return "facetKey." + error;
                                 }
@@ -34688,14 +36145,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchRequest.FacetSpec} FacetSpec
                              */
-                            FacetSpec.fromObject = function fromObject(object) {
+                            FacetSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchRequest.FacetSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchRequest.FacetSpec();
                                 if (object.facetKey != null) {
                                     if (typeof object.facetKey !== "object")
                                         throw TypeError(".google.cloud.retail.v2.SearchRequest.FacetSpec.facetKey: object expected");
-                                    message.facetKey = $root.google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.fromObject(object.facetKey);
+                                    message.facetKey = $root.google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.fromObject(object.facetKey, long + 1);
                                 }
                                 if (object.limit != null)
                                     message.limit = object.limit | 0;
@@ -34803,7 +36264,7 @@
                                     this.contains = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -34952,9 +36413,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FacetKey.decode = function decode(reader, length, error) {
+                                FacetKey.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -34968,7 +36433,7 @@
                                         case 2: {
                                                 if (!(message.intervals && message.intervals.length))
                                                     message.intervals = [];
-                                                message.intervals.push($root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32()));
+                                                message.intervals.push($root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         case 3: {
@@ -35006,7 +36471,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -35037,9 +36502,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FacetKey.verify = function verify(message) {
+                                FacetKey.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.key != null && message.hasOwnProperty("key"))
                                         if (!$util.isString(message.key))
                                             return "key: string expected";
@@ -35047,7 +36516,7 @@
                                         if (!Array.isArray(message.intervals))
                                             return "intervals: array expected";
                                         for (var i = 0; i < message.intervals.length; ++i) {
-                                            var error = $root.google.cloud.retail.v2.Interval.verify(message.intervals[i]);
+                                            var error = $root.google.cloud.retail.v2.Interval.verify(message.intervals[i], long + 1);
                                             if (error)
                                                 return "intervals." + error;
                                         }
@@ -35096,9 +36565,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey} FacetKey
                                  */
-                                FacetKey.fromObject = function fromObject(object) {
+                                FacetKey.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey();
                                     if (object.key != null)
                                         message.key = String(object.key);
@@ -35109,7 +36582,7 @@
                                         for (var i = 0; i < object.intervals.length; ++i) {
                                             if (typeof object.intervals[i] !== "object")
                                                 throw TypeError(".google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.intervals: object expected");
-                                            message.intervals[i] = $root.google.cloud.retail.v2.Interval.fromObject(object.intervals[i]);
+                                            message.intervals[i] = $root.google.cloud.retail.v2.Interval.fromObject(object.intervals[i], long + 1);
                                         }
                                     }
                                     if (object.restrictedValues) {
@@ -35255,7 +36728,7 @@
                             function DynamicFacetSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -35320,9 +36793,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DynamicFacetSpec.decode = function decode(reader, length, error) {
+                            DynamicFacetSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -35334,7 +36811,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -35365,9 +36842,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DynamicFacetSpec.verify = function verify(message) {
+                            DynamicFacetSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -35388,9 +36869,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchRequest.DynamicFacetSpec} DynamicFacetSpec
                              */
-                            DynamicFacetSpec.fromObject = function fromObject(object) {
+                            DynamicFacetSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec();
                                 switch (object.mode) {
                                 default:
@@ -35502,7 +36987,7 @@
                                 this.conditionBoostSpecs = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -35587,9 +37072,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BoostSpec.decode = function decode(reader, length, error) {
+                            BoostSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.BoostSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -35599,7 +37088,7 @@
                                     case 1: {
                                             if (!(message.conditionBoostSpecs && message.conditionBoostSpecs.length))
                                                 message.conditionBoostSpecs = [];
-                                            message.conditionBoostSpecs.push($root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32()));
+                                            message.conditionBoostSpecs.push($root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
@@ -35607,7 +37096,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -35638,15 +37127,19 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BoostSpec.verify = function verify(message) {
+                            BoostSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.conditionBoostSpecs != null && message.hasOwnProperty("conditionBoostSpecs")) {
                                     if (!Array.isArray(message.conditionBoostSpecs))
                                         return "conditionBoostSpecs: array expected";
                                     for (var i = 0; i < message.conditionBoostSpecs.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.conditionBoostSpecs[i]);
+                                        var error = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.conditionBoostSpecs[i], long + 1);
                                         if (error)
                                             return "conditionBoostSpecs." + error;
                                     }
@@ -35667,9 +37160,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchRequest.BoostSpec} BoostSpec
                              */
-                            BoostSpec.fromObject = function fromObject(object) {
+                            BoostSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchRequest.BoostSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchRequest.BoostSpec();
                                 if (object.conditionBoostSpecs) {
                                     if (!Array.isArray(object.conditionBoostSpecs))
@@ -35678,7 +37175,7 @@
                                     for (var i = 0; i < object.conditionBoostSpecs.length; ++i) {
                                         if (typeof object.conditionBoostSpecs[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchRequest.BoostSpec.conditionBoostSpecs: object expected");
-                                        message.conditionBoostSpecs[i] = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.conditionBoostSpecs[i]);
+                                        message.conditionBoostSpecs[i] = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.conditionBoostSpecs[i], long + 1);
                                     }
                                 }
                                 if (object.skipBoostSpecValidation != null)
@@ -35761,7 +37258,7 @@
                                 function ConditionBoostSpec(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -35836,9 +37333,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                ConditionBoostSpec.decode = function decode(reader, length, error) {
+                                ConditionBoostSpec.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -35854,7 +37355,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -35885,9 +37386,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                ConditionBoostSpec.verify = function verify(message) {
+                                ConditionBoostSpec.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.condition != null && message.hasOwnProperty("condition"))
                                         if (!$util.isString(message.condition))
                                             return "condition: string expected";
@@ -35905,9 +37410,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec} ConditionBoostSpec
                                  */
-                                ConditionBoostSpec.fromObject = function fromObject(object) {
+                                ConditionBoostSpec.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec();
                                     if (object.condition != null)
                                         message.condition = String(object.condition);
@@ -35993,7 +37502,7 @@
                             function QueryExpansionSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -36068,9 +37577,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            QueryExpansionSpec.decode = function decode(reader, length, error) {
+                            QueryExpansionSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -36086,7 +37599,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -36117,9 +37630,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            QueryExpansionSpec.verify = function verify(message) {
+                            QueryExpansionSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.condition != null && message.hasOwnProperty("condition"))
                                     switch (message.condition) {
                                     default:
@@ -36143,9 +37660,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchRequest.QueryExpansionSpec} QueryExpansionSpec
                              */
-                            QueryExpansionSpec.fromObject = function fromObject(object) {
+                            QueryExpansionSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec();
                                 switch (object.condition) {
                                 default:
@@ -36261,7 +37782,7 @@
                             function PersonalizationSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -36326,9 +37847,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PersonalizationSpec.decode = function decode(reader, length, error) {
+                            PersonalizationSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -36340,7 +37865,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -36371,9 +37896,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PersonalizationSpec.verify = function verify(message) {
+                            PersonalizationSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -36394,9 +37923,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchRequest.PersonalizationSpec} PersonalizationSpec
                              */
-                            PersonalizationSpec.fromObject = function fromObject(object) {
+                            PersonalizationSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec();
                                 switch (object.mode) {
                                 default:
@@ -36506,7 +38039,7 @@
                             function SpellCorrectionSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -36571,9 +38104,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SpellCorrectionSpec.decode = function decode(reader, length, error) {
+                            SpellCorrectionSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -36585,7 +38122,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -36616,9 +38153,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SpellCorrectionSpec.verify = function verify(message) {
+                            SpellCorrectionSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -36639,9 +38180,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec} SpellCorrectionSpec
                              */
-                            SpellCorrectionSpec.fromObject = function fromObject(object) {
+                            SpellCorrectionSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec();
                                 switch (object.mode) {
                                 default:
@@ -36753,7 +38298,7 @@
                             function ConversationalSearchSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -36838,9 +38383,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalSearchSpec.decode = function decode(reader, length, error) {
+                            ConversationalSearchSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -36856,11 +38405,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.userAnswer = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.decode(reader, reader.uint32());
+                                            message.userAnswer = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -36891,9 +38440,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalSearchSpec.verify = function verify(message) {
+                            ConversationalSearchSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.followupConversationRequested != null && message.hasOwnProperty("followupConversationRequested"))
                                     if (typeof message.followupConversationRequested !== "boolean")
                                         return "followupConversationRequested: boolean expected";
@@ -36901,7 +38454,7 @@
                                     if (!$util.isString(message.conversationId))
                                         return "conversationId: string expected";
                                 if (message.userAnswer != null && message.hasOwnProperty("userAnswer")) {
-                                    var error = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.verify(message.userAnswer);
+                                    var error = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.verify(message.userAnswer, long + 1);
                                     if (error)
                                         return "userAnswer." + error;
                                 }
@@ -36916,9 +38469,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec} ConversationalSearchSpec
                              */
-                            ConversationalSearchSpec.fromObject = function fromObject(object) {
+                            ConversationalSearchSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec();
                                 if (object.followupConversationRequested != null)
                                     message.followupConversationRequested = Boolean(object.followupConversationRequested);
@@ -36927,7 +38484,7 @@
                                 if (object.userAnswer != null) {
                                     if (typeof object.userAnswer !== "object")
                                         throw TypeError(".google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.userAnswer: object expected");
-                                    message.userAnswer = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.fromObject(object.userAnswer);
+                                    message.userAnswer = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.fromObject(object.userAnswer, long + 1);
                                 }
                                 return message;
                             };
@@ -37006,7 +38563,7 @@
                                 function UserAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -37095,9 +38652,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                UserAnswer.decode = function decode(reader, length, error) {
+                                UserAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -37109,11 +38670,11 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.selectedAnswer = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.decode(reader, reader.uint32());
+                                                message.selectedAnswer = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -37144,9 +38705,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                UserAnswer.verify = function verify(message) {
+                                UserAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.textAnswer != null && message.hasOwnProperty("textAnswer")) {
                                         properties.type = 1;
@@ -37158,7 +38723,7 @@
                                             return "type: multiple values";
                                         properties.type = 1;
                                         {
-                                            var error = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.verify(message.selectedAnswer);
+                                            var error = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.verify(message.selectedAnswer, long + 1);
                                             if (error)
                                                 return "selectedAnswer." + error;
                                         }
@@ -37174,16 +38739,20 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer} UserAnswer
                                  */
-                                UserAnswer.fromObject = function fromObject(object) {
+                                UserAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer();
                                     if (object.textAnswer != null)
                                         message.textAnswer = String(object.textAnswer);
                                     if (object.selectedAnswer != null) {
                                         if (typeof object.selectedAnswer !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.selectedAnswer: object expected");
-                                        message.selectedAnswer = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer);
+                                        message.selectedAnswer = $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer, long + 1);
                                     }
                                     return message;
                                 };
@@ -37262,7 +38831,7 @@
                                         this.productAttributeValues = [];
                                         if (properties)
                                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                                if (properties[keys[i]] != null)
+                                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                     this[keys[i]] = properties[keys[i]];
                                     }
     
@@ -37338,9 +38907,13 @@
                                      * @throws {Error} If the payload is not a reader or valid buffer
                                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                      */
-                                    SelectedAnswer.decode = function decode(reader, length, error) {
+                                    SelectedAnswer.decode = function decode(reader, length, error, long) {
                                         if (!(reader instanceof $Reader))
                                             reader = $Reader.create(reader);
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $Reader.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer();
                                         while (reader.pos < end) {
                                             var tag = reader.uint32();
@@ -37350,15 +38923,15 @@
                                             case 1: {
                                                     if (!(message.productAttributeValues && message.productAttributeValues.length))
                                                         message.productAttributeValues = [];
-                                                    message.productAttributeValues.push($root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32()));
+                                                    message.productAttributeValues.push($root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1));
                                                     break;
                                                 }
                                             case 2: {
-                                                    message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32());
+                                                    message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 }
                                             default:
-                                                reader.skipType(tag & 7);
+                                                reader.skipType(tag & 7, long);
                                                 break;
                                             }
                                         }
@@ -37389,20 +38962,24 @@
                                      * @param {Object.<string,*>} message Plain object to verify
                                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                      */
-                                    SelectedAnswer.verify = function verify(message) {
+                                    SelectedAnswer.verify = function verify(message, long) {
                                         if (typeof message !== "object" || message === null)
                                             return "object expected";
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            return "maximum nesting depth exceeded";
                                         if (message.productAttributeValues != null && message.hasOwnProperty("productAttributeValues")) {
                                             if (!Array.isArray(message.productAttributeValues))
                                                 return "productAttributeValues: array expected";
                                             for (var i = 0; i < message.productAttributeValues.length; ++i) {
-                                                var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValues[i]);
+                                                var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValues[i], long + 1);
                                                 if (error)
                                                     return "productAttributeValues." + error;
                                             }
                                         }
                                         if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                            var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue);
+                                            var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                             if (error)
                                                 return "productAttributeValue." + error;
                                         }
@@ -37417,9 +38994,13 @@
                                      * @param {Object.<string,*>} object Plain object
                                      * @returns {google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer} SelectedAnswer
                                      */
-                                    SelectedAnswer.fromObject = function fromObject(object) {
+                                    SelectedAnswer.fromObject = function fromObject(object, long) {
                                         if (object instanceof $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer)
                                             return object;
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var message = new $root.google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer();
                                         if (object.productAttributeValues) {
                                             if (!Array.isArray(object.productAttributeValues))
@@ -37428,13 +39009,13 @@
                                             for (var i = 0; i < object.productAttributeValues.length; ++i) {
                                                 if (typeof object.productAttributeValues[i] !== "object")
                                                     throw TypeError(".google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.productAttributeValues: object expected");
-                                                message.productAttributeValues[i] = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValues[i]);
+                                                message.productAttributeValues[i] = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValues[i], long + 1);
                                             }
                                         }
                                         if (object.productAttributeValue != null) {
                                             if (typeof object.productAttributeValue !== "object")
                                                 throw TypeError(".google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.productAttributeValue: object expected");
-                                            message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                            message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                         }
                                         return message;
                                     };
@@ -37523,7 +39104,7 @@
                                 this.appliedTiles = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -37599,9 +39180,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TileNavigationSpec.decode = function decode(reader, length, error) {
+                            TileNavigationSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchRequest.TileNavigationSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -37615,11 +39200,11 @@
                                     case 2: {
                                             if (!(message.appliedTiles && message.appliedTiles.length))
                                                 message.appliedTiles = [];
-                                            message.appliedTiles.push($root.google.cloud.retail.v2.Tile.decode(reader, reader.uint32()));
+                                            message.appliedTiles.push($root.google.cloud.retail.v2.Tile.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -37650,9 +39235,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TileNavigationSpec.verify = function verify(message) {
+                            TileNavigationSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.tileNavigationRequested != null && message.hasOwnProperty("tileNavigationRequested"))
                                     if (typeof message.tileNavigationRequested !== "boolean")
                                         return "tileNavigationRequested: boolean expected";
@@ -37660,7 +39249,7 @@
                                     if (!Array.isArray(message.appliedTiles))
                                         return "appliedTiles: array expected";
                                     for (var i = 0; i < message.appliedTiles.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.Tile.verify(message.appliedTiles[i]);
+                                        var error = $root.google.cloud.retail.v2.Tile.verify(message.appliedTiles[i], long + 1);
                                         if (error)
                                             return "appliedTiles." + error;
                                     }
@@ -37676,9 +39265,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchRequest.TileNavigationSpec} TileNavigationSpec
                              */
-                            TileNavigationSpec.fromObject = function fromObject(object) {
+                            TileNavigationSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchRequest.TileNavigationSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchRequest.TileNavigationSpec();
                                 if (object.tileNavigationRequested != null)
                                     message.tileNavigationRequested = Boolean(object.tileNavigationRequested);
@@ -37689,7 +39282,7 @@
                                     for (var i = 0; i < object.appliedTiles.length; ++i) {
                                         if (typeof object.appliedTiles[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchRequest.TileNavigationSpec.appliedTiles: object expected");
-                                        message.appliedTiles[i] = $root.google.cloud.retail.v2.Tile.fromObject(object.appliedTiles[i]);
+                                        message.appliedTiles[i] = $root.google.cloud.retail.v2.Tile.fromObject(object.appliedTiles[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -37808,7 +39401,7 @@
                             this.experimentInfo = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -38008,9 +39601,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchResponse.decode = function decode(reader, length, error) {
+                        SearchResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -38020,13 +39617,13 @@
                                 case 1: {
                                         if (!(message.results && message.results.length))
                                             message.results = [];
-                                        message.results.push($root.google.cloud.retail.v2.SearchResponse.SearchResult.decode(reader, reader.uint32()));
+                                        message.results.push($root.google.cloud.retail.v2.SearchResponse.SearchResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
                                         if (!(message.facets && message.facets.length))
                                             message.facets = [];
-                                        message.facets.push($root.google.cloud.retail.v2.SearchResponse.Facet.decode(reader, reader.uint32()));
+                                        message.facets.push($root.google.cloud.retail.v2.SearchResponse.Facet.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 3: {
@@ -38046,7 +39643,7 @@
                                         break;
                                     }
                                 case 7: {
-                                        message.queryExpansionInfo = $root.google.cloud.retail.v2.SearchResponse.QueryExpansionInfo.decode(reader, reader.uint32());
+                                        message.queryExpansionInfo = $root.google.cloud.retail.v2.SearchResponse.QueryExpansionInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -38060,31 +39657,31 @@
                                         break;
                                     }
                                 case 22: {
-                                        message.pinControlMetadata = $root.google.cloud.retail.v2.PinControlMetadata.decode(reader, reader.uint32());
+                                        message.pinControlMetadata = $root.google.cloud.retail.v2.PinControlMetadata.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
                                         if (!(message.invalidConditionBoostSpecs && message.invalidConditionBoostSpecs.length))
                                             message.invalidConditionBoostSpecs = [];
-                                        message.invalidConditionBoostSpecs.push($root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32()));
+                                        message.invalidConditionBoostSpecs.push($root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 17: {
                                         if (!(message.experimentInfo && message.experimentInfo.length))
                                             message.experimentInfo = [];
-                                        message.experimentInfo.push($root.google.cloud.retail.v2.ExperimentInfo.decode(reader, reader.uint32()));
+                                        message.experimentInfo.push($root.google.cloud.retail.v2.ExperimentInfo.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 18: {
-                                        message.conversationalSearchResult = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.decode(reader, reader.uint32());
+                                        message.conversationalSearchResult = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
-                                        message.tileNavigationResult = $root.google.cloud.retail.v2.SearchResponse.TileNavigationResult.decode(reader, reader.uint32());
+                                        message.tileNavigationResult = $root.google.cloud.retail.v2.SearchResponse.TileNavigationResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -38115,14 +39712,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchResponse.verify = function verify(message) {
+                        SearchResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.results != null && message.hasOwnProperty("results")) {
                                 if (!Array.isArray(message.results))
                                     return "results: array expected";
                                 for (var i = 0; i < message.results.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.SearchResponse.SearchResult.verify(message.results[i]);
+                                    var error = $root.google.cloud.retail.v2.SearchResponse.SearchResult.verify(message.results[i], long + 1);
                                     if (error)
                                         return "results." + error;
                                 }
@@ -38131,7 +39732,7 @@
                                 if (!Array.isArray(message.facets))
                                     return "facets: array expected";
                                 for (var i = 0; i < message.facets.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.SearchResponse.Facet.verify(message.facets[i]);
+                                    var error = $root.google.cloud.retail.v2.SearchResponse.Facet.verify(message.facets[i], long + 1);
                                     if (error)
                                         return "facets." + error;
                                 }
@@ -38149,7 +39750,7 @@
                                 if (!$util.isString(message.nextPageToken))
                                     return "nextPageToken: string expected";
                             if (message.queryExpansionInfo != null && message.hasOwnProperty("queryExpansionInfo")) {
-                                var error = $root.google.cloud.retail.v2.SearchResponse.QueryExpansionInfo.verify(message.queryExpansionInfo);
+                                var error = $root.google.cloud.retail.v2.SearchResponse.QueryExpansionInfo.verify(message.queryExpansionInfo, long + 1);
                                 if (error)
                                     return "queryExpansionInfo." + error;
                             }
@@ -38164,7 +39765,7 @@
                                         return "appliedControls: string[] expected";
                             }
                             if (message.pinControlMetadata != null && message.hasOwnProperty("pinControlMetadata")) {
-                                var error = $root.google.cloud.retail.v2.PinControlMetadata.verify(message.pinControlMetadata);
+                                var error = $root.google.cloud.retail.v2.PinControlMetadata.verify(message.pinControlMetadata, long + 1);
                                 if (error)
                                     return "pinControlMetadata." + error;
                             }
@@ -38172,7 +39773,7 @@
                                 if (!Array.isArray(message.invalidConditionBoostSpecs))
                                     return "invalidConditionBoostSpecs: array expected";
                                 for (var i = 0; i < message.invalidConditionBoostSpecs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.invalidConditionBoostSpecs[i]);
+                                    var error = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.invalidConditionBoostSpecs[i], long + 1);
                                     if (error)
                                         return "invalidConditionBoostSpecs." + error;
                                 }
@@ -38181,18 +39782,18 @@
                                 if (!Array.isArray(message.experimentInfo))
                                     return "experimentInfo: array expected";
                                 for (var i = 0; i < message.experimentInfo.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.ExperimentInfo.verify(message.experimentInfo[i]);
+                                    var error = $root.google.cloud.retail.v2.ExperimentInfo.verify(message.experimentInfo[i], long + 1);
                                     if (error)
                                         return "experimentInfo." + error;
                                 }
                             }
                             if (message.conversationalSearchResult != null && message.hasOwnProperty("conversationalSearchResult")) {
-                                var error = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.verify(message.conversationalSearchResult);
+                                var error = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.verify(message.conversationalSearchResult, long + 1);
                                 if (error)
                                     return "conversationalSearchResult." + error;
                             }
                             if (message.tileNavigationResult != null && message.hasOwnProperty("tileNavigationResult")) {
-                                var error = $root.google.cloud.retail.v2.SearchResponse.TileNavigationResult.verify(message.tileNavigationResult);
+                                var error = $root.google.cloud.retail.v2.SearchResponse.TileNavigationResult.verify(message.tileNavigationResult, long + 1);
                                 if (error)
                                     return "tileNavigationResult." + error;
                             }
@@ -38207,9 +39808,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.SearchResponse} SearchResponse
                          */
-                        SearchResponse.fromObject = function fromObject(object) {
+                        SearchResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.SearchResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.SearchResponse();
                             if (object.results) {
                                 if (!Array.isArray(object.results))
@@ -38218,7 +39823,7 @@
                                 for (var i = 0; i < object.results.length; ++i) {
                                     if (typeof object.results[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.SearchResponse.results: object expected");
-                                    message.results[i] = $root.google.cloud.retail.v2.SearchResponse.SearchResult.fromObject(object.results[i]);
+                                    message.results[i] = $root.google.cloud.retail.v2.SearchResponse.SearchResult.fromObject(object.results[i], long + 1);
                                 }
                             }
                             if (object.facets) {
@@ -38228,7 +39833,7 @@
                                 for (var i = 0; i < object.facets.length; ++i) {
                                     if (typeof object.facets[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.SearchResponse.facets: object expected");
-                                    message.facets[i] = $root.google.cloud.retail.v2.SearchResponse.Facet.fromObject(object.facets[i]);
+                                    message.facets[i] = $root.google.cloud.retail.v2.SearchResponse.Facet.fromObject(object.facets[i], long + 1);
                                 }
                             }
                             if (object.totalSize != null)
@@ -38242,7 +39847,7 @@
                             if (object.queryExpansionInfo != null) {
                                 if (typeof object.queryExpansionInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchResponse.queryExpansionInfo: object expected");
-                                message.queryExpansionInfo = $root.google.cloud.retail.v2.SearchResponse.QueryExpansionInfo.fromObject(object.queryExpansionInfo);
+                                message.queryExpansionInfo = $root.google.cloud.retail.v2.SearchResponse.QueryExpansionInfo.fromObject(object.queryExpansionInfo, long + 1);
                             }
                             if (object.redirectUri != null)
                                 message.redirectUri = String(object.redirectUri);
@@ -38256,7 +39861,7 @@
                             if (object.pinControlMetadata != null) {
                                 if (typeof object.pinControlMetadata !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchResponse.pinControlMetadata: object expected");
-                                message.pinControlMetadata = $root.google.cloud.retail.v2.PinControlMetadata.fromObject(object.pinControlMetadata);
+                                message.pinControlMetadata = $root.google.cloud.retail.v2.PinControlMetadata.fromObject(object.pinControlMetadata, long + 1);
                             }
                             if (object.invalidConditionBoostSpecs) {
                                 if (!Array.isArray(object.invalidConditionBoostSpecs))
@@ -38265,7 +39870,7 @@
                                 for (var i = 0; i < object.invalidConditionBoostSpecs.length; ++i) {
                                     if (typeof object.invalidConditionBoostSpecs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.SearchResponse.invalidConditionBoostSpecs: object expected");
-                                    message.invalidConditionBoostSpecs[i] = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.invalidConditionBoostSpecs[i]);
+                                    message.invalidConditionBoostSpecs[i] = $root.google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.invalidConditionBoostSpecs[i], long + 1);
                                 }
                             }
                             if (object.experimentInfo) {
@@ -38275,18 +39880,18 @@
                                 for (var i = 0; i < object.experimentInfo.length; ++i) {
                                     if (typeof object.experimentInfo[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.SearchResponse.experimentInfo: object expected");
-                                    message.experimentInfo[i] = $root.google.cloud.retail.v2.ExperimentInfo.fromObject(object.experimentInfo[i]);
+                                    message.experimentInfo[i] = $root.google.cloud.retail.v2.ExperimentInfo.fromObject(object.experimentInfo[i], long + 1);
                                 }
                             }
                             if (object.conversationalSearchResult != null) {
                                 if (typeof object.conversationalSearchResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchResponse.conversationalSearchResult: object expected");
-                                message.conversationalSearchResult = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.fromObject(object.conversationalSearchResult);
+                                message.conversationalSearchResult = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.fromObject(object.conversationalSearchResult, long + 1);
                             }
                             if (object.tileNavigationResult != null) {
                                 if (typeof object.tileNavigationResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SearchResponse.tileNavigationResult: object expected");
-                                message.tileNavigationResult = $root.google.cloud.retail.v2.SearchResponse.TileNavigationResult.fromObject(object.tileNavigationResult);
+                                message.tileNavigationResult = $root.google.cloud.retail.v2.SearchResponse.TileNavigationResult.fromObject(object.tileNavigationResult, long + 1);
                             }
                             return message;
                         };
@@ -38424,7 +40029,7 @@
                                 this.modelScores = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -38559,9 +40164,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SearchResult.decode = function decode(reader, length, error) {
+                            SearchResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchResponse.SearchResult(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -38573,7 +40182,7 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.product = $root.google.cloud.retail.v2.Product.decode(reader, reader.uint32());
+                                            message.product = $root.google.cloud.retail.v2.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -38593,13 +40202,15 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                                    value = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.matchingVariantFields, key);
                                             message.matchingVariantFields[key] = value;
                                             break;
                                         }
@@ -38616,13 +40227,15 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32());
+                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.variantRollupValues, key);
                                             message.variantRollupValues[key] = value;
                                             break;
                                         }
@@ -38645,18 +40258,20 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.cloud.retail.v2.DoubleList.decode(reader, reader.uint32());
+                                                    value = $root.google.cloud.retail.v2.DoubleList.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.modelScores, key);
                                             message.modelScores[key] = value;
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -38687,14 +40302,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SearchResult.verify = function verify(message) {
+                            SearchResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.id != null && message.hasOwnProperty("id"))
                                     if (!$util.isString(message.id))
                                         return "id: string expected";
                                 if (message.product != null && message.hasOwnProperty("product")) {
-                                    var error = $root.google.cloud.retail.v2.Product.verify(message.product);
+                                    var error = $root.google.cloud.retail.v2.Product.verify(message.product, long + 1);
                                     if (error)
                                         return "product." + error;
                                 }
@@ -38706,7 +40325,7 @@
                                         return "matchingVariantFields: object expected";
                                     var key = Object.keys(message.matchingVariantFields);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.protobuf.FieldMask.verify(message.matchingVariantFields[key[i]]);
+                                        var error = $root.google.protobuf.FieldMask.verify(message.matchingVariantFields[key[i]], long + 1);
                                         if (error)
                                             return "matchingVariantFields." + error;
                                     }
@@ -38716,7 +40335,7 @@
                                         return "variantRollupValues: object expected";
                                     var key = Object.keys(message.variantRollupValues);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.protobuf.Value.verify(message.variantRollupValues[key[i]]);
+                                        var error = $root.google.protobuf.Value.verify(message.variantRollupValues[key[i]], long + 1);
                                         if (error)
                                             return "variantRollupValues." + error;
                                     }
@@ -38733,7 +40352,7 @@
                                         return "modelScores: object expected";
                                     var key = Object.keys(message.modelScores);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.DoubleList.verify(message.modelScores[key[i]]);
+                                        var error = $root.google.cloud.retail.v2.DoubleList.verify(message.modelScores[key[i]], long + 1);
                                         if (error)
                                             return "modelScores." + error;
                                     }
@@ -38749,16 +40368,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchResponse.SearchResult} SearchResult
                              */
-                            SearchResult.fromObject = function fromObject(object) {
+                            SearchResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchResponse.SearchResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchResponse.SearchResult();
                                 if (object.id != null)
                                     message.id = String(object.id);
                                 if (object.product != null) {
                                     if (typeof object.product !== "object")
                                         throw TypeError(".google.cloud.retail.v2.SearchResponse.SearchResult.product: object expected");
-                                    message.product = $root.google.cloud.retail.v2.Product.fromObject(object.product);
+                                    message.product = $root.google.cloud.retail.v2.Product.fromObject(object.product, long + 1);
                                 }
                                 if (object.matchingVariantCount != null)
                                     message.matchingVariantCount = object.matchingVariantCount | 0;
@@ -38767,9 +40390,11 @@
                                         throw TypeError(".google.cloud.retail.v2.SearchResponse.SearchResult.matchingVariantFields: object expected");
                                     message.matchingVariantFields = {};
                                     for (var keys = Object.keys(object.matchingVariantFields), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.matchingVariantFields, keys[i]);
                                         if (typeof object.matchingVariantFields[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchResponse.SearchResult.matchingVariantFields: object expected");
-                                        message.matchingVariantFields[keys[i]] = $root.google.protobuf.FieldMask.fromObject(object.matchingVariantFields[keys[i]]);
+                                        message.matchingVariantFields[keys[i]] = $root.google.protobuf.FieldMask.fromObject(object.matchingVariantFields[keys[i]], long + 1);
                                     }
                                 }
                                 if (object.variantRollupValues) {
@@ -38777,9 +40402,11 @@
                                         throw TypeError(".google.cloud.retail.v2.SearchResponse.SearchResult.variantRollupValues: object expected");
                                     message.variantRollupValues = {};
                                     for (var keys = Object.keys(object.variantRollupValues), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.variantRollupValues, keys[i]);
                                         if (typeof object.variantRollupValues[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchResponse.SearchResult.variantRollupValues: object expected");
-                                        message.variantRollupValues[keys[i]] = $root.google.protobuf.Value.fromObject(object.variantRollupValues[keys[i]]);
+                                        message.variantRollupValues[keys[i]] = $root.google.protobuf.Value.fromObject(object.variantRollupValues[keys[i]], long + 1);
                                     }
                                 }
                                 if (object.personalLabels) {
@@ -38794,9 +40421,11 @@
                                         throw TypeError(".google.cloud.retail.v2.SearchResponse.SearchResult.modelScores: object expected");
                                     message.modelScores = {};
                                     for (var keys = Object.keys(object.modelScores), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.modelScores, keys[i]);
                                         if (typeof object.modelScores[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchResponse.SearchResult.modelScores: object expected");
-                                        message.modelScores[keys[i]] = $root.google.cloud.retail.v2.DoubleList.fromObject(object.modelScores[keys[i]]);
+                                        message.modelScores[keys[i]] = $root.google.cloud.retail.v2.DoubleList.fromObject(object.modelScores[keys[i]], long + 1);
                                     }
                                 }
                                 return message;
@@ -38836,13 +40465,19 @@
                                 var keys2;
                                 if (message.matchingVariantFields && (keys2 = Object.keys(message.matchingVariantFields)).length) {
                                     object.matchingVariantFields = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.matchingVariantFields, keys2[j]);
                                         object.matchingVariantFields[keys2[j]] = $root.google.protobuf.FieldMask.toObject(message.matchingVariantFields[keys2[j]], options);
+                                    }
                                 }
                                 if (message.variantRollupValues && (keys2 = Object.keys(message.variantRollupValues)).length) {
                                     object.variantRollupValues = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.variantRollupValues, keys2[j]);
                                         object.variantRollupValues[keys2[j]] = $root.google.protobuf.Value.toObject(message.variantRollupValues[keys2[j]], options);
+                                    }
                                 }
                                 if (message.personalLabels && message.personalLabels.length) {
                                     object.personalLabels = [];
@@ -38851,8 +40486,11 @@
                                 }
                                 if (message.modelScores && (keys2 = Object.keys(message.modelScores)).length) {
                                     object.modelScores = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.modelScores, keys2[j]);
                                         object.modelScores[keys2[j]] = $root.google.cloud.retail.v2.DoubleList.toObject(message.modelScores[keys2[j]], options);
+                                    }
                                 }
                                 return object;
                             };
@@ -38909,7 +40547,7 @@
                                 this.values = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -38995,9 +40633,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            Facet.decode = function decode(reader, length, error) {
+                            Facet.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchResponse.Facet();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -39011,7 +40653,7 @@
                                     case 2: {
                                             if (!(message.values && message.values.length))
                                                 message.values = [];
-                                            message.values.push($root.google.cloud.retail.v2.SearchResponse.Facet.FacetValue.decode(reader, reader.uint32()));
+                                            message.values.push($root.google.cloud.retail.v2.SearchResponse.Facet.FacetValue.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 3: {
@@ -39019,7 +40661,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -39050,9 +40692,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            Facet.verify = function verify(message) {
+                            Facet.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.key != null && message.hasOwnProperty("key"))
                                     if (!$util.isString(message.key))
                                         return "key: string expected";
@@ -39060,7 +40706,7 @@
                                     if (!Array.isArray(message.values))
                                         return "values: array expected";
                                     for (var i = 0; i < message.values.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.SearchResponse.Facet.FacetValue.verify(message.values[i]);
+                                        var error = $root.google.cloud.retail.v2.SearchResponse.Facet.FacetValue.verify(message.values[i], long + 1);
                                         if (error)
                                             return "values." + error;
                                     }
@@ -39079,9 +40725,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchResponse.Facet} Facet
                              */
-                            Facet.fromObject = function fromObject(object) {
+                            Facet.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchResponse.Facet)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchResponse.Facet();
                                 if (object.key != null)
                                     message.key = String(object.key);
@@ -39092,7 +40742,7 @@
                                     for (var i = 0; i < object.values.length; ++i) {
                                         if (typeof object.values[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchResponse.Facet.values: object expected");
-                                        message.values[i] = $root.google.cloud.retail.v2.SearchResponse.Facet.FacetValue.fromObject(object.values[i]);
+                                        message.values[i] = $root.google.cloud.retail.v2.SearchResponse.Facet.FacetValue.fromObject(object.values[i], long + 1);
                                     }
                                 }
                                 if (object.dynamicFacet != null)
@@ -39181,7 +40831,7 @@
                                 function FacetValue(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -39300,9 +40950,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FacetValue.decode = function decode(reader, length, error) {
+                                FacetValue.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchResponse.Facet.FacetValue();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -39314,7 +40968,7 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.interval = $root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32());
+                                                message.interval = $root.google.cloud.retail.v2.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         case 3: {
@@ -39330,7 +40984,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -39361,9 +41015,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FacetValue.verify = function verify(message) {
+                                FacetValue.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.value != null && message.hasOwnProperty("value")) {
                                         properties.facetValue = 1;
@@ -39375,7 +41033,7 @@
                                             return "facetValue: multiple values";
                                         properties.facetValue = 1;
                                         {
-                                            var error = $root.google.cloud.retail.v2.Interval.verify(message.interval);
+                                            var error = $root.google.cloud.retail.v2.Interval.verify(message.interval, long + 1);
                                             if (error)
                                                 return "interval." + error;
                                         }
@@ -39400,16 +41058,20 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.SearchResponse.Facet.FacetValue} FacetValue
                                  */
-                                FacetValue.fromObject = function fromObject(object) {
+                                FacetValue.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.SearchResponse.Facet.FacetValue)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.SearchResponse.Facet.FacetValue();
                                     if (object.value != null)
                                         message.value = String(object.value);
                                     if (object.interval != null) {
                                         if (typeof object.interval !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchResponse.Facet.FacetValue.interval: object expected");
-                                        message.interval = $root.google.cloud.retail.v2.Interval.fromObject(object.interval);
+                                        message.interval = $root.google.cloud.retail.v2.Interval.fromObject(object.interval, long + 1);
                                     }
                                     if (object.count != null)
                                         if ($util.Long)
@@ -39524,7 +41186,7 @@
                             function QueryExpansionInfo(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -39599,9 +41261,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            QueryExpansionInfo.decode = function decode(reader, length, error) {
+                            QueryExpansionInfo.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchResponse.QueryExpansionInfo();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -39617,7 +41283,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -39648,9 +41314,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            QueryExpansionInfo.verify = function verify(message) {
+                            QueryExpansionInfo.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.expandedQuery != null && message.hasOwnProperty("expandedQuery"))
                                     if (typeof message.expandedQuery !== "boolean")
                                         return "expandedQuery: boolean expected";
@@ -39668,9 +41338,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchResponse.QueryExpansionInfo} QueryExpansionInfo
                              */
-                            QueryExpansionInfo.fromObject = function fromObject(object) {
+                            QueryExpansionInfo.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchResponse.QueryExpansionInfo)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchResponse.QueryExpansionInfo();
                                 if (object.expandedQuery != null)
                                     message.expandedQuery = Boolean(object.expandedQuery);
@@ -39773,7 +41447,7 @@
                                 this.suggestedAnswers = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -39890,9 +41564,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalSearchResult.decode = function decode(reader, length, error) {
+                            ConversationalSearchResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -39910,7 +41588,7 @@
                                     case 3: {
                                             if (!(message.additionalFilters && message.additionalFilters.length))
                                                 message.additionalFilters = [];
-                                            message.additionalFilters.push($root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32()));
+                                            message.additionalFilters.push($root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 4: {
@@ -39920,15 +41598,15 @@
                                     case 5: {
                                             if (!(message.suggestedAnswers && message.suggestedAnswers.length))
                                                 message.suggestedAnswers = [];
-                                            message.suggestedAnswers.push($root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer.decode(reader, reader.uint32()));
+                                            message.suggestedAnswers.push($root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 6: {
-                                            message.additionalFilter = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32());
+                                            message.additionalFilter = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -39959,9 +41637,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalSearchResult.verify = function verify(message) {
+                            ConversationalSearchResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.conversationId != null && message.hasOwnProperty("conversationId"))
                                     if (!$util.isString(message.conversationId))
                                         return "conversationId: string expected";
@@ -39972,7 +41654,7 @@
                                     if (!Array.isArray(message.additionalFilters))
                                         return "additionalFilters: array expected";
                                     for (var i = 0; i < message.additionalFilters.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilters[i]);
+                                        var error = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilters[i], long + 1);
                                         if (error)
                                             return "additionalFilters." + error;
                                     }
@@ -39984,13 +41666,13 @@
                                     if (!Array.isArray(message.suggestedAnswers))
                                         return "suggestedAnswers: array expected";
                                     for (var i = 0; i < message.suggestedAnswers.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer.verify(message.suggestedAnswers[i]);
+                                        var error = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer.verify(message.suggestedAnswers[i], long + 1);
                                         if (error)
                                             return "suggestedAnswers." + error;
                                     }
                                 }
                                 if (message.additionalFilter != null && message.hasOwnProperty("additionalFilter")) {
-                                    var error = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilter);
+                                    var error = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilter, long + 1);
                                     if (error)
                                         return "additionalFilter." + error;
                                 }
@@ -40005,9 +41687,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchResponse.ConversationalSearchResult} ConversationalSearchResult
                              */
-                            ConversationalSearchResult.fromObject = function fromObject(object) {
+                            ConversationalSearchResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult();
                                 if (object.conversationId != null)
                                     message.conversationId = String(object.conversationId);
@@ -40020,7 +41706,7 @@
                                     for (var i = 0; i < object.additionalFilters.length; ++i) {
                                         if (typeof object.additionalFilters[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.additionalFilters: object expected");
-                                        message.additionalFilters[i] = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilters[i]);
+                                        message.additionalFilters[i] = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilters[i], long + 1);
                                     }
                                 }
                                 if (object.followupQuestion != null)
@@ -40032,13 +41718,13 @@
                                     for (var i = 0; i < object.suggestedAnswers.length; ++i) {
                                         if (typeof object.suggestedAnswers[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.suggestedAnswers: object expected");
-                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer.fromObject(object.suggestedAnswers[i]);
+                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer.fromObject(object.suggestedAnswers[i], long + 1);
                                     }
                                 }
                                 if (object.additionalFilter != null) {
                                     if (typeof object.additionalFilter !== "object")
                                         throw TypeError(".google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.additionalFilter: object expected");
-                                    message.additionalFilter = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilter);
+                                    message.additionalFilter = $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilter, long + 1);
                                 }
                                 return message;
                             };
@@ -40133,7 +41819,7 @@
                                 function SuggestedAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -40198,9 +41884,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                SuggestedAnswer.decode = function decode(reader, length, error) {
+                                SuggestedAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -40208,11 +41898,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -40243,11 +41933,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                SuggestedAnswer.verify = function verify(message) {
+                                SuggestedAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -40262,14 +41956,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer} SuggestedAnswer
                                  */
-                                SuggestedAnswer.fromObject = function fromObject(object) {
+                                SuggestedAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -40343,7 +42041,7 @@
                                 function AdditionalFilter(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -40408,9 +42106,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                AdditionalFilter.decode = function decode(reader, length, error) {
+                                AdditionalFilter.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -40418,11 +42120,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -40453,11 +42155,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                AdditionalFilter.verify = function verify(message) {
+                                AdditionalFilter.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -40472,14 +42178,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter} AdditionalFilter
                                  */
-                                AdditionalFilter.fromObject = function fromObject(object) {
+                                AdditionalFilter.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -40557,7 +42267,7 @@
                                 this.tiles = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -40623,9 +42333,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TileNavigationResult.decode = function decode(reader, length, error) {
+                            TileNavigationResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SearchResponse.TileNavigationResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -40635,11 +42349,11 @@
                                     case 1: {
                                             if (!(message.tiles && message.tiles.length))
                                                 message.tiles = [];
-                                            message.tiles.push($root.google.cloud.retail.v2.Tile.decode(reader, reader.uint32()));
+                                            message.tiles.push($root.google.cloud.retail.v2.Tile.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -40670,14 +42384,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TileNavigationResult.verify = function verify(message) {
+                            TileNavigationResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.tiles != null && message.hasOwnProperty("tiles")) {
                                     if (!Array.isArray(message.tiles))
                                         return "tiles: array expected";
                                     for (var i = 0; i < message.tiles.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2.Tile.verify(message.tiles[i]);
+                                        var error = $root.google.cloud.retail.v2.Tile.verify(message.tiles[i], long + 1);
                                         if (error)
                                             return "tiles." + error;
                                     }
@@ -40693,9 +42411,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.SearchResponse.TileNavigationResult} TileNavigationResult
                              */
-                            TileNavigationResult.fromObject = function fromObject(object) {
+                            TileNavigationResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.SearchResponse.TileNavigationResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.SearchResponse.TileNavigationResult();
                                 if (object.tiles) {
                                     if (!Array.isArray(object.tiles))
@@ -40704,7 +42426,7 @@
                                     for (var i = 0; i < object.tiles.length; ++i) {
                                         if (typeof object.tiles[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.SearchResponse.TileNavigationResult.tiles: object expected");
-                                        message.tiles[i] = $root.google.cloud.retail.v2.Tile.fromObject(object.tiles[i]);
+                                        message.tiles[i] = $root.google.cloud.retail.v2.Tile.fromObject(object.tiles[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -40786,7 +42508,7 @@
                         function ExperimentInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -40875,9 +42597,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExperimentInfo.decode = function decode(reader, length, error) {
+                        ExperimentInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ExperimentInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -40885,7 +42611,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.servingConfigExperiment = $root.google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment.decode(reader, reader.uint32());
+                                        message.servingConfigExperiment = $root.google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
@@ -40893,7 +42619,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -40924,14 +42650,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExperimentInfo.verify = function verify(message) {
+                        ExperimentInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.servingConfigExperiment != null && message.hasOwnProperty("servingConfigExperiment")) {
                                 properties.experimentMetadata = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment.verify(message.servingConfigExperiment);
+                                    var error = $root.google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment.verify(message.servingConfigExperiment, long + 1);
                                     if (error)
                                         return "servingConfigExperiment." + error;
                                 }
@@ -40950,14 +42680,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ExperimentInfo} ExperimentInfo
                          */
-                        ExperimentInfo.fromObject = function fromObject(object) {
+                        ExperimentInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ExperimentInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ExperimentInfo();
                             if (object.servingConfigExperiment != null) {
                                 if (typeof object.servingConfigExperiment !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ExperimentInfo.servingConfigExperiment: object expected");
-                                message.servingConfigExperiment = $root.google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment.fromObject(object.servingConfigExperiment);
+                                message.servingConfigExperiment = $root.google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment.fromObject(object.servingConfigExperiment, long + 1);
                             }
                             if (object.experiment != null)
                                 message.experiment = String(object.experiment);
@@ -41036,7 +42770,7 @@
                             function ServingConfigExperiment(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -41111,9 +42845,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ServingConfigExperiment.decode = function decode(reader, length, error) {
+                            ServingConfigExperiment.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -41129,7 +42867,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -41160,9 +42898,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ServingConfigExperiment.verify = function verify(message) {
+                            ServingConfigExperiment.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.originalServingConfig != null && message.hasOwnProperty("originalServingConfig"))
                                     if (!$util.isString(message.originalServingConfig))
                                         return "originalServingConfig: string expected";
@@ -41180,9 +42922,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment} ServingConfigExperiment
                              */
-                            ServingConfigExperiment.fromObject = function fromObject(object) {
+                            ServingConfigExperiment.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment();
                                 if (object.originalServingConfig != null)
                                     message.originalServingConfig = String(object.originalServingConfig);
@@ -41269,7 +43015,7 @@
                         function GenerativeQuestionsFeatureConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -41354,9 +43100,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GenerativeQuestionsFeatureConfig.decode = function decode(reader, length, error) {
+                        GenerativeQuestionsFeatureConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GenerativeQuestionsFeatureConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -41376,7 +43126,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -41407,9 +43157,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GenerativeQuestionsFeatureConfig.verify = function verify(message) {
+                        GenerativeQuestionsFeatureConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -41430,9 +43184,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GenerativeQuestionsFeatureConfig} GenerativeQuestionsFeatureConfig
                          */
-                        GenerativeQuestionsFeatureConfig.fromObject = function fromObject(object) {
+                        GenerativeQuestionsFeatureConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GenerativeQuestionsFeatureConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GenerativeQuestionsFeatureConfig();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -41526,7 +43284,7 @@
                             this.exampleValues = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -41652,9 +43410,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GenerativeQuestionConfig.decode = function decode(reader, length, error) {
+                        GenerativeQuestionConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GenerativeQuestionConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -41692,7 +43454,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -41723,9 +43485,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GenerativeQuestionConfig.verify = function verify(message) {
+                        GenerativeQuestionConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -41762,9 +43528,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GenerativeQuestionConfig} GenerativeQuestionConfig
                          */
-                        GenerativeQuestionConfig.fromObject = function fromObject(object) {
+                        GenerativeQuestionConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GenerativeQuestionConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GenerativeQuestionConfig();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -42081,7 +43851,7 @@
                         function UpdateGenerativeQuestionsFeatureConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -42156,9 +43926,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UpdateGenerativeQuestionsFeatureConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -42166,15 +43940,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2.GenerativeQuestionsFeatureConfig.decode(reader, reader.uint32());
+                                        message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2.GenerativeQuestionsFeatureConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -42205,16 +43979,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateGenerativeQuestionsFeatureConfigRequest.verify = function verify(message) {
+                        UpdateGenerativeQuestionsFeatureConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionsFeatureConfig != null && message.hasOwnProperty("generativeQuestionsFeatureConfig")) {
-                                var error = $root.google.cloud.retail.v2.GenerativeQuestionsFeatureConfig.verify(message.generativeQuestionsFeatureConfig);
+                                var error = $root.google.cloud.retail.v2.GenerativeQuestionsFeatureConfig.verify(message.generativeQuestionsFeatureConfig, long + 1);
                                 if (error)
                                     return "generativeQuestionsFeatureConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -42229,19 +44007,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UpdateGenerativeQuestionsFeatureConfigRequest} UpdateGenerativeQuestionsFeatureConfigRequest
                          */
-                        UpdateGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object) {
+                        UpdateGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UpdateGenerativeQuestionsFeatureConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UpdateGenerativeQuestionsFeatureConfigRequest();
                             if (object.generativeQuestionsFeatureConfig != null) {
                                 if (typeof object.generativeQuestionsFeatureConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateGenerativeQuestionsFeatureConfigRequest.generativeQuestionsFeatureConfig: object expected");
-                                message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2.GenerativeQuestionsFeatureConfig.fromObject(object.generativeQuestionsFeatureConfig);
+                                message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2.GenerativeQuestionsFeatureConfig.fromObject(object.generativeQuestionsFeatureConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateGenerativeQuestionsFeatureConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -42319,7 +44101,7 @@
                         function GetGenerativeQuestionsFeatureConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -42384,9 +44166,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error) {
+                        GetGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GetGenerativeQuestionsFeatureConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -42398,7 +44184,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -42429,9 +44215,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetGenerativeQuestionsFeatureConfigRequest.verify = function verify(message) {
+                        GetGenerativeQuestionsFeatureConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -42446,9 +44236,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GetGenerativeQuestionsFeatureConfigRequest} GetGenerativeQuestionsFeatureConfigRequest
                          */
-                        GetGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object) {
+                        GetGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GetGenerativeQuestionsFeatureConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GetGenerativeQuestionsFeatureConfigRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -42524,7 +44318,7 @@
                         function ListGenerativeQuestionConfigsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -42589,9 +44383,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error) {
+                        ListGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListGenerativeQuestionConfigsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -42603,7 +44401,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -42634,9 +44432,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListGenerativeQuestionConfigsRequest.verify = function verify(message) {
+                        ListGenerativeQuestionConfigsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -42651,9 +44453,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListGenerativeQuestionConfigsRequest} ListGenerativeQuestionConfigsRequest
                          */
-                        ListGenerativeQuestionConfigsRequest.fromObject = function fromObject(object) {
+                        ListGenerativeQuestionConfigsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListGenerativeQuestionConfigsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListGenerativeQuestionConfigsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -42730,7 +44536,7 @@
                             this.generativeQuestionConfigs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -42796,9 +44602,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error) {
+                        ListGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListGenerativeQuestionConfigsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -42808,11 +44618,11 @@
                                 case 1: {
                                         if (!(message.generativeQuestionConfigs && message.generativeQuestionConfigs.length))
                                             message.generativeQuestionConfigs = [];
-                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2.GenerativeQuestionConfig.decode(reader, reader.uint32()));
+                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2.GenerativeQuestionConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -42843,14 +44653,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListGenerativeQuestionConfigsResponse.verify = function verify(message) {
+                        ListGenerativeQuestionConfigsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionConfigs != null && message.hasOwnProperty("generativeQuestionConfigs")) {
                                 if (!Array.isArray(message.generativeQuestionConfigs))
                                     return "generativeQuestionConfigs: array expected";
                                 for (var i = 0; i < message.generativeQuestionConfigs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i]);
+                                    var error = $root.google.cloud.retail.v2.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i], long + 1);
                                     if (error)
                                         return "generativeQuestionConfigs." + error;
                                 }
@@ -42866,9 +44680,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListGenerativeQuestionConfigsResponse} ListGenerativeQuestionConfigsResponse
                          */
-                        ListGenerativeQuestionConfigsResponse.fromObject = function fromObject(object) {
+                        ListGenerativeQuestionConfigsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListGenerativeQuestionConfigsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListGenerativeQuestionConfigsResponse();
                             if (object.generativeQuestionConfigs) {
                                 if (!Array.isArray(object.generativeQuestionConfigs))
@@ -42877,7 +44695,7 @@
                                 for (var i = 0; i < object.generativeQuestionConfigs.length; ++i) {
                                     if (typeof object.generativeQuestionConfigs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ListGenerativeQuestionConfigsResponse.generativeQuestionConfigs: object expected");
-                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i]);
+                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i], long + 1);
                                 }
                             }
                             return message;
@@ -42956,7 +44774,7 @@
                         function UpdateGenerativeQuestionConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -43031,9 +44849,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateGenerativeQuestionConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateGenerativeQuestionConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -43041,15 +44863,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 3: {
-                                        message.generativeQuestionConfig = $root.google.cloud.retail.v2.GenerativeQuestionConfig.decode(reader, reader.uint32());
+                                        message.generativeQuestionConfig = $root.google.cloud.retail.v2.GenerativeQuestionConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -43080,16 +44902,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateGenerativeQuestionConfigRequest.verify = function verify(message) {
+                        UpdateGenerativeQuestionConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionConfig != null && message.hasOwnProperty("generativeQuestionConfig")) {
-                                var error = $root.google.cloud.retail.v2.GenerativeQuestionConfig.verify(message.generativeQuestionConfig);
+                                var error = $root.google.cloud.retail.v2.GenerativeQuestionConfig.verify(message.generativeQuestionConfig, long + 1);
                                 if (error)
                                     return "generativeQuestionConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -43104,19 +44930,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest} UpdateGenerativeQuestionConfigRequest
                          */
-                        UpdateGenerativeQuestionConfigRequest.fromObject = function fromObject(object) {
+                        UpdateGenerativeQuestionConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest();
                             if (object.generativeQuestionConfig != null) {
                                 if (typeof object.generativeQuestionConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest.generativeQuestionConfig: object expected");
-                                message.generativeQuestionConfig = $root.google.cloud.retail.v2.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfig);
+                                message.generativeQuestionConfig = $root.google.cloud.retail.v2.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -43196,7 +45026,7 @@
                             this.requests = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -43272,9 +45102,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BatchUpdateGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error) {
+                        BatchUpdateGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.BatchUpdateGenerativeQuestionConfigsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -43288,11 +45122,11 @@
                                 case 2: {
                                         if (!(message.requests && message.requests.length))
                                             message.requests = [];
-                                        message.requests.push($root.google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest.decode(reader, reader.uint32()));
+                                        message.requests.push($root.google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -43323,9 +45157,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BatchUpdateGenerativeQuestionConfigsRequest.verify = function verify(message) {
+                        BatchUpdateGenerativeQuestionConfigsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -43333,7 +45171,7 @@
                                 if (!Array.isArray(message.requests))
                                     return "requests: array expected";
                                 for (var i = 0; i < message.requests.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest.verify(message.requests[i]);
+                                    var error = $root.google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest.verify(message.requests[i], long + 1);
                                     if (error)
                                         return "requests." + error;
                                 }
@@ -43349,9 +45187,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.BatchUpdateGenerativeQuestionConfigsRequest} BatchUpdateGenerativeQuestionConfigsRequest
                          */
-                        BatchUpdateGenerativeQuestionConfigsRequest.fromObject = function fromObject(object) {
+                        BatchUpdateGenerativeQuestionConfigsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.BatchUpdateGenerativeQuestionConfigsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.BatchUpdateGenerativeQuestionConfigsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -43362,7 +45204,7 @@
                                 for (var i = 0; i < object.requests.length; ++i) {
                                     if (typeof object.requests[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.BatchUpdateGenerativeQuestionConfigsRequest.requests: object expected");
-                                    message.requests[i] = $root.google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest.fromObject(object.requests[i]);
+                                    message.requests[i] = $root.google.cloud.retail.v2.UpdateGenerativeQuestionConfigRequest.fromObject(object.requests[i], long + 1);
                                 }
                             }
                             return message;
@@ -43445,7 +45287,7 @@
                             this.generativeQuestionConfigs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -43511,9 +45353,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BatchUpdateGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error) {
+                        BatchUpdateGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.BatchUpdateGenerativeQuestionConfigsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -43523,11 +45369,11 @@
                                 case 1: {
                                         if (!(message.generativeQuestionConfigs && message.generativeQuestionConfigs.length))
                                             message.generativeQuestionConfigs = [];
-                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2.GenerativeQuestionConfig.decode(reader, reader.uint32()));
+                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2.GenerativeQuestionConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -43558,14 +45404,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BatchUpdateGenerativeQuestionConfigsResponse.verify = function verify(message) {
+                        BatchUpdateGenerativeQuestionConfigsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionConfigs != null && message.hasOwnProperty("generativeQuestionConfigs")) {
                                 if (!Array.isArray(message.generativeQuestionConfigs))
                                     return "generativeQuestionConfigs: array expected";
                                 for (var i = 0; i < message.generativeQuestionConfigs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i]);
+                                    var error = $root.google.cloud.retail.v2.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i], long + 1);
                                     if (error)
                                         return "generativeQuestionConfigs." + error;
                                 }
@@ -43581,9 +45431,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.BatchUpdateGenerativeQuestionConfigsResponse} BatchUpdateGenerativeQuestionConfigsResponse
                          */
-                        BatchUpdateGenerativeQuestionConfigsResponse.fromObject = function fromObject(object) {
+                        BatchUpdateGenerativeQuestionConfigsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.BatchUpdateGenerativeQuestionConfigsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.BatchUpdateGenerativeQuestionConfigsResponse();
                             if (object.generativeQuestionConfigs) {
                                 if (!Array.isArray(object.generativeQuestionConfigs))
@@ -43592,7 +45446,7 @@
                                 for (var i = 0; i < object.generativeQuestionConfigs.length; ++i) {
                                     if (typeof object.generativeQuestionConfigs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.BatchUpdateGenerativeQuestionConfigsResponse.generativeQuestionConfigs: object expected");
-                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i]);
+                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i], long + 1);
                                 }
                             }
                             return message;
@@ -43685,7 +45539,7 @@
                             this.servingConfigLists = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -43891,9 +45745,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Model.decode = function decode(reader, length, error) {
+                        Model.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Model();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -43917,11 +45775,11 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -43937,7 +45795,7 @@
                                         break;
                                     }
                                 case 12: {
-                                        message.lastTuneTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.lastTuneTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 15: {
@@ -43955,15 +45813,15 @@
                                 case 19: {
                                         if (!(message.servingConfigLists && message.servingConfigLists.length))
                                             message.servingConfigLists = [];
-                                        message.servingConfigLists.push($root.google.cloud.retail.v2.Model.ServingConfigList.decode(reader, reader.uint32()));
+                                        message.servingConfigLists.push($root.google.cloud.retail.v2.Model.ServingConfigList.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 22: {
-                                        message.modelFeaturesConfig = $root.google.cloud.retail.v2.Model.ModelFeaturesConfig.decode(reader, reader.uint32());
+                                        message.modelFeaturesConfig = $root.google.cloud.retail.v2.Model.ModelFeaturesConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -43994,9 +45852,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Model.verify = function verify(message) {
+                        Model.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -44023,12 +45885,12 @@
                                     break;
                                 }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -44049,7 +45911,7 @@
                                     break;
                                 }
                             if (message.lastTuneTime != null && message.hasOwnProperty("lastTuneTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.lastTuneTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.lastTuneTime, long + 1);
                                 if (error)
                                     return "lastTuneTime." + error;
                             }
@@ -44078,13 +45940,13 @@
                                 if (!Array.isArray(message.servingConfigLists))
                                     return "servingConfigLists: array expected";
                                 for (var i = 0; i < message.servingConfigLists.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Model.ServingConfigList.verify(message.servingConfigLists[i]);
+                                    var error = $root.google.cloud.retail.v2.Model.ServingConfigList.verify(message.servingConfigLists[i], long + 1);
                                     if (error)
                                         return "servingConfigLists." + error;
                                 }
                             }
                             if (message.modelFeaturesConfig != null && message.hasOwnProperty("modelFeaturesConfig")) {
-                                var error = $root.google.cloud.retail.v2.Model.ModelFeaturesConfig.verify(message.modelFeaturesConfig);
+                                var error = $root.google.cloud.retail.v2.Model.ModelFeaturesConfig.verify(message.modelFeaturesConfig, long + 1);
                                 if (error)
                                     return "modelFeaturesConfig." + error;
                             }
@@ -44099,9 +45961,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.Model} Model
                          */
-                        Model.fromObject = function fromObject(object) {
+                        Model.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.Model)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.Model();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -44154,12 +46020,12 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Model.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Model.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.type != null)
                                 message.type = String(object.type);
@@ -44192,7 +46058,7 @@
                             if (object.lastTuneTime != null) {
                                 if (typeof object.lastTuneTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Model.lastTuneTime: object expected");
-                                message.lastTuneTime = $root.google.protobuf.Timestamp.fromObject(object.lastTuneTime);
+                                message.lastTuneTime = $root.google.protobuf.Timestamp.fromObject(object.lastTuneTime, long + 1);
                             }
                             if (object.tuningOperation != null)
                                 message.tuningOperation = String(object.tuningOperation);
@@ -44243,13 +46109,13 @@
                                 for (var i = 0; i < object.servingConfigLists.length; ++i) {
                                     if (typeof object.servingConfigLists[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Model.servingConfigLists: object expected");
-                                    message.servingConfigLists[i] = $root.google.cloud.retail.v2.Model.ServingConfigList.fromObject(object.servingConfigLists[i]);
+                                    message.servingConfigLists[i] = $root.google.cloud.retail.v2.Model.ServingConfigList.fromObject(object.servingConfigLists[i], long + 1);
                                 }
                             }
                             if (object.modelFeaturesConfig != null) {
                                 if (typeof object.modelFeaturesConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.Model.modelFeaturesConfig: object expected");
-                                message.modelFeaturesConfig = $root.google.cloud.retail.v2.Model.ModelFeaturesConfig.fromObject(object.modelFeaturesConfig);
+                                message.modelFeaturesConfig = $root.google.cloud.retail.v2.Model.ModelFeaturesConfig.fromObject(object.modelFeaturesConfig, long + 1);
                             }
                             return message;
                         };
@@ -44368,7 +46234,7 @@
                                 this.servingConfigIds = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -44434,9 +46300,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ServingConfigList.decode = function decode(reader, length, error) {
+                            ServingConfigList.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Model.ServingConfigList();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -44450,7 +46320,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -44481,9 +46351,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ServingConfigList.verify = function verify(message) {
+                            ServingConfigList.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.servingConfigIds != null && message.hasOwnProperty("servingConfigIds")) {
                                     if (!Array.isArray(message.servingConfigIds))
                                         return "servingConfigIds: array expected";
@@ -44502,9 +46376,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Model.ServingConfigList} ServingConfigList
                              */
-                            ServingConfigList.fromObject = function fromObject(object) {
+                            ServingConfigList.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Model.ServingConfigList)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Model.ServingConfigList();
                                 if (object.servingConfigIds) {
                                     if (!Array.isArray(object.servingConfigIds))
@@ -44588,7 +46466,7 @@
                             function FrequentlyBoughtTogetherFeaturesConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -44653,9 +46531,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FrequentlyBoughtTogetherFeaturesConfig.decode = function decode(reader, length, error) {
+                            FrequentlyBoughtTogetherFeaturesConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Model.FrequentlyBoughtTogetherFeaturesConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -44667,7 +46549,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -44698,9 +46580,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FrequentlyBoughtTogetherFeaturesConfig.verify = function verify(message) {
+                            FrequentlyBoughtTogetherFeaturesConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.contextProductsType != null && message.hasOwnProperty("contextProductsType"))
                                     switch (message.contextProductsType) {
                                     default:
@@ -44721,9 +46607,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Model.FrequentlyBoughtTogetherFeaturesConfig} FrequentlyBoughtTogetherFeaturesConfig
                              */
-                            FrequentlyBoughtTogetherFeaturesConfig.fromObject = function fromObject(object) {
+                            FrequentlyBoughtTogetherFeaturesConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Model.FrequentlyBoughtTogetherFeaturesConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Model.FrequentlyBoughtTogetherFeaturesConfig();
                                 switch (object.contextProductsType) {
                                 default:
@@ -44817,7 +46707,7 @@
                             function ModelFeaturesConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -44896,9 +46786,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ModelFeaturesConfig.decode = function decode(reader, length, error) {
+                            ModelFeaturesConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.Model.ModelFeaturesConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -44906,11 +46800,11 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2.Model.FrequentlyBoughtTogetherFeaturesConfig.decode(reader, reader.uint32());
+                                            message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2.Model.FrequentlyBoughtTogetherFeaturesConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -44941,14 +46835,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ModelFeaturesConfig.verify = function verify(message) {
+                            ModelFeaturesConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.frequentlyBoughtTogetherConfig != null && message.hasOwnProperty("frequentlyBoughtTogetherConfig")) {
                                     properties.typeDedicatedConfig = 1;
                                     {
-                                        var error = $root.google.cloud.retail.v2.Model.FrequentlyBoughtTogetherFeaturesConfig.verify(message.frequentlyBoughtTogetherConfig);
+                                        var error = $root.google.cloud.retail.v2.Model.FrequentlyBoughtTogetherFeaturesConfig.verify(message.frequentlyBoughtTogetherConfig, long + 1);
                                         if (error)
                                             return "frequentlyBoughtTogetherConfig." + error;
                                     }
@@ -44964,14 +46862,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.Model.ModelFeaturesConfig} ModelFeaturesConfig
                              */
-                            ModelFeaturesConfig.fromObject = function fromObject(object) {
+                            ModelFeaturesConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.Model.ModelFeaturesConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.Model.ModelFeaturesConfig();
                                 if (object.frequentlyBoughtTogetherConfig != null) {
                                     if (typeof object.frequentlyBoughtTogetherConfig !== "object")
                                         throw TypeError(".google.cloud.retail.v2.Model.ModelFeaturesConfig.frequentlyBoughtTogetherConfig: object expected");
-                                    message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2.Model.FrequentlyBoughtTogetherFeaturesConfig.fromObject(object.frequentlyBoughtTogetherConfig);
+                                    message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2.Model.FrequentlyBoughtTogetherFeaturesConfig.fromObject(object.frequentlyBoughtTogetherConfig, long + 1);
                                 }
                                 return message;
                             };
@@ -45434,7 +47336,7 @@
                         function CreateModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -45519,9 +47421,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateModelRequest.decode = function decode(reader, length, error) {
+                        CreateModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CreateModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -45533,7 +47439,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.model = $root.google.cloud.retail.v2.Model.decode(reader, reader.uint32());
+                                        message.model = $root.google.cloud.retail.v2.Model.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -45541,7 +47447,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -45572,14 +47478,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateModelRequest.verify = function verify(message) {
+                        CreateModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.model != null && message.hasOwnProperty("model")) {
-                                var error = $root.google.cloud.retail.v2.Model.verify(message.model);
+                                var error = $root.google.cloud.retail.v2.Model.verify(message.model, long + 1);
                                 if (error)
                                     return "model." + error;
                             }
@@ -45597,16 +47507,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CreateModelRequest} CreateModelRequest
                          */
-                        CreateModelRequest.fromObject = function fromObject(object) {
+                        CreateModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CreateModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CreateModelRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.model != null) {
                                 if (typeof object.model !== "object")
                                     throw TypeError(".google.cloud.retail.v2.CreateModelRequest.model: object expected");
-                                message.model = $root.google.cloud.retail.v2.Model.fromObject(object.model);
+                                message.model = $root.google.cloud.retail.v2.Model.fromObject(object.model, long + 1);
                             }
                             if (object.dryRun != null)
                                 message.dryRun = Boolean(object.dryRun);
@@ -45690,7 +47604,7 @@
                         function UpdateModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -45765,9 +47679,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateModelRequest.decode = function decode(reader, length, error) {
+                        UpdateModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UpdateModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -45775,15 +47693,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.model = $root.google.cloud.retail.v2.Model.decode(reader, reader.uint32());
+                                        message.model = $root.google.cloud.retail.v2.Model.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -45814,16 +47732,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateModelRequest.verify = function verify(message) {
+                        UpdateModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.model != null && message.hasOwnProperty("model")) {
-                                var error = $root.google.cloud.retail.v2.Model.verify(message.model);
+                                var error = $root.google.cloud.retail.v2.Model.verify(message.model, long + 1);
                                 if (error)
                                     return "model." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -45838,19 +47760,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UpdateModelRequest} UpdateModelRequest
                          */
-                        UpdateModelRequest.fromObject = function fromObject(object) {
+                        UpdateModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UpdateModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UpdateModelRequest();
                             if (object.model != null) {
                                 if (typeof object.model !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateModelRequest.model: object expected");
-                                message.model = $root.google.cloud.retail.v2.Model.fromObject(object.model);
+                                message.model = $root.google.cloud.retail.v2.Model.fromObject(object.model, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateModelRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -45928,7 +47854,7 @@
                         function GetModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -45993,9 +47919,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetModelRequest.decode = function decode(reader, length, error) {
+                        GetModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GetModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -46007,7 +47937,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -46038,9 +47968,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetModelRequest.verify = function verify(message) {
+                        GetModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -46055,9 +47989,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GetModelRequest} GetModelRequest
                          */
-                        GetModelRequest.fromObject = function fromObject(object) {
+                        GetModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GetModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GetModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -46133,7 +48071,7 @@
                         function PauseModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -46198,9 +48136,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PauseModelRequest.decode = function decode(reader, length, error) {
+                        PauseModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PauseModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -46212,7 +48154,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -46243,9 +48185,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PauseModelRequest.verify = function verify(message) {
+                        PauseModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -46260,9 +48206,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PauseModelRequest} PauseModelRequest
                          */
-                        PauseModelRequest.fromObject = function fromObject(object) {
+                        PauseModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PauseModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PauseModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -46338,7 +48288,7 @@
                         function ResumeModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -46403,9 +48353,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ResumeModelRequest.decode = function decode(reader, length, error) {
+                        ResumeModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ResumeModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -46417,7 +48371,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -46448,9 +48402,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ResumeModelRequest.verify = function verify(message) {
+                        ResumeModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -46465,9 +48423,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ResumeModelRequest} ResumeModelRequest
                          */
-                        ResumeModelRequest.fromObject = function fromObject(object) {
+                        ResumeModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ResumeModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ResumeModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -46545,7 +48507,7 @@
                         function ListModelsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -46630,9 +48592,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListModelsRequest.decode = function decode(reader, length, error) {
+                        ListModelsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListModelsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -46652,7 +48618,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -46683,9 +48649,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListModelsRequest.verify = function verify(message) {
+                        ListModelsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -46706,9 +48676,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListModelsRequest} ListModelsRequest
                          */
-                        ListModelsRequest.fromObject = function fromObject(object) {
+                        ListModelsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListModelsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListModelsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -46795,7 +48769,7 @@
                         function DeleteModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -46860,9 +48834,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteModelRequest.decode = function decode(reader, length, error) {
+                        DeleteModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.DeleteModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -46874,7 +48852,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -46905,9 +48883,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteModelRequest.verify = function verify(message) {
+                        DeleteModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -46922,9 +48904,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.DeleteModelRequest} DeleteModelRequest
                          */
-                        DeleteModelRequest.fromObject = function fromObject(object) {
+                        DeleteModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.DeleteModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.DeleteModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -47002,7 +48988,7 @@
                             this.models = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -47078,9 +49064,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListModelsResponse.decode = function decode(reader, length, error) {
+                        ListModelsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListModelsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -47090,7 +49080,7 @@
                                 case 1: {
                                         if (!(message.models && message.models.length))
                                             message.models = [];
-                                        message.models.push($root.google.cloud.retail.v2.Model.decode(reader, reader.uint32()));
+                                        message.models.push($root.google.cloud.retail.v2.Model.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -47098,7 +49088,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -47129,14 +49119,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListModelsResponse.verify = function verify(message) {
+                        ListModelsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.models != null && message.hasOwnProperty("models")) {
                                 if (!Array.isArray(message.models))
                                     return "models: array expected";
                                 for (var i = 0; i < message.models.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Model.verify(message.models[i]);
+                                    var error = $root.google.cloud.retail.v2.Model.verify(message.models[i], long + 1);
                                     if (error)
                                         return "models." + error;
                                 }
@@ -47155,9 +49149,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListModelsResponse} ListModelsResponse
                          */
-                        ListModelsResponse.fromObject = function fromObject(object) {
+                        ListModelsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListModelsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListModelsResponse();
                             if (object.models) {
                                 if (!Array.isArray(object.models))
@@ -47166,7 +49164,7 @@
                                 for (var i = 0; i < object.models.length; ++i) {
                                     if (typeof object.models[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ListModelsResponse.models: object expected");
-                                    message.models[i] = $root.google.cloud.retail.v2.Model.fromObject(object.models[i]);
+                                    message.models[i] = $root.google.cloud.retail.v2.Model.fromObject(object.models[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -47250,7 +49248,7 @@
                         function TuneModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -47315,9 +49313,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TuneModelRequest.decode = function decode(reader, length, error) {
+                        TuneModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.TuneModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -47329,7 +49331,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -47360,9 +49362,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TuneModelRequest.verify = function verify(message) {
+                        TuneModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -47377,9 +49383,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.TuneModelRequest} TuneModelRequest
                          */
-                        TuneModelRequest.fromObject = function fromObject(object) {
+                        TuneModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.TuneModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.TuneModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -47455,7 +49465,7 @@
                         function CreateModelMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -47520,9 +49530,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateModelMetadata.decode = function decode(reader, length, error) {
+                        CreateModelMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CreateModelMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -47534,7 +49548,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -47565,9 +49579,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateModelMetadata.verify = function verify(message) {
+                        CreateModelMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.model != null && message.hasOwnProperty("model"))
                                 if (!$util.isString(message.model))
                                     return "model: string expected";
@@ -47582,9 +49600,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CreateModelMetadata} CreateModelMetadata
                          */
-                        CreateModelMetadata.fromObject = function fromObject(object) {
+                        CreateModelMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CreateModelMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CreateModelMetadata();
                             if (object.model != null)
                                 message.model = String(object.model);
@@ -47660,7 +49682,7 @@
                         function TuneModelMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -47725,9 +49747,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TuneModelMetadata.decode = function decode(reader, length, error) {
+                        TuneModelMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.TuneModelMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -47739,7 +49765,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -47770,9 +49796,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TuneModelMetadata.verify = function verify(message) {
+                        TuneModelMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.model != null && message.hasOwnProperty("model"))
                                 if (!$util.isString(message.model))
                                     return "model: string expected";
@@ -47787,9 +49817,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.TuneModelMetadata} TuneModelMetadata
                          */
-                        TuneModelMetadata.fromObject = function fromObject(object) {
+                        TuneModelMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.TuneModelMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.TuneModelMetadata();
                             if (object.model != null)
                                 message.model = String(object.model);
@@ -47864,7 +49898,7 @@
                         function TuneModelResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -47919,9 +49953,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TuneModelResponse.decode = function decode(reader, length, error) {
+                        TuneModelResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.TuneModelResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -47929,7 +49967,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -47960,9 +49998,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TuneModelResponse.verify = function verify(message) {
+                        TuneModelResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -47974,9 +50016,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.TuneModelResponse} TuneModelResponse
                          */
-                        TuneModelResponse.fromObject = function fromObject(object) {
+                        TuneModelResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.TuneModelResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.TuneModelResponse();
                         };
     
@@ -48119,7 +50165,7 @@
                             this.labels = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -48258,9 +50304,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PredictRequest.decode = function decode(reader, length, error) {
+                        PredictRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PredictRequest(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -48272,7 +50322,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.userEvent = $root.google.cloud.retail.v2.UserEvent.decode(reader, reader.uint32());
+                                        message.userEvent = $root.google.cloud.retail.v2.UserEvent.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -48304,13 +50354,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.protobuf.Value.decode(reader, reader.uint32());
+                                                value = $root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.params, key);
                                         message.params[key] = value;
                                         break;
                                     }
@@ -48330,15 +50382,17 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -48369,14 +50423,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PredictRequest.verify = function verify(message) {
+                        PredictRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.placement != null && message.hasOwnProperty("placement"))
                                 if (!$util.isString(message.placement))
                                     return "placement: string expected";
                             if (message.userEvent != null && message.hasOwnProperty("userEvent")) {
-                                var error = $root.google.cloud.retail.v2.UserEvent.verify(message.userEvent);
+                                var error = $root.google.cloud.retail.v2.UserEvent.verify(message.userEvent, long + 1);
                                 if (error)
                                     return "userEvent." + error;
                             }
@@ -48397,7 +50455,7 @@
                                     return "params: object expected";
                                 var key = Object.keys(message.params);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.protobuf.Value.verify(message.params[key[i]]);
+                                    var error = $root.google.protobuf.Value.verify(message.params[key[i]], long + 1);
                                     if (error)
                                         return "params." + error;
                                 }
@@ -48421,16 +50479,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PredictRequest} PredictRequest
                          */
-                        PredictRequest.fromObject = function fromObject(object) {
+                        PredictRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PredictRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PredictRequest();
                             if (object.placement != null)
                                 message.placement = String(object.placement);
                             if (object.userEvent != null) {
                                 if (typeof object.userEvent !== "object")
                                     throw TypeError(".google.cloud.retail.v2.PredictRequest.userEvent: object expected");
-                                message.userEvent = $root.google.cloud.retail.v2.UserEvent.fromObject(object.userEvent);
+                                message.userEvent = $root.google.cloud.retail.v2.UserEvent.fromObject(object.userEvent, long + 1);
                             }
                             if (object.pageSize != null)
                                 message.pageSize = object.pageSize | 0;
@@ -48445,17 +50507,22 @@
                                     throw TypeError(".google.cloud.retail.v2.PredictRequest.params: object expected");
                                 message.params = {};
                                 for (var keys = Object.keys(object.params), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.params, keys[i]);
                                     if (typeof object.params[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.PredictRequest.params: object expected");
-                                    message.params[keys[i]] = $root.google.protobuf.Value.fromObject(object.params[keys[i]]);
+                                    message.params[keys[i]] = $root.google.protobuf.Value.fromObject(object.params[keys[i]], long + 1);
                                 }
                             }
                             if (object.labels) {
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.retail.v2.PredictRequest.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             return message;
                         };
@@ -48500,13 +50567,19 @@
                             var keys2;
                             if (message.params && (keys2 = Object.keys(message.params)).length) {
                                 object.params = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.params, keys2[j]);
                                     object.params[keys2[j]] = $root.google.protobuf.Value.toObject(message.params[keys2[j]], options);
+                                }
                             }
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             return object;
                         };
@@ -48565,7 +50638,7 @@
                             this.missingIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -48662,9 +50735,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PredictResponse.decode = function decode(reader, length, error) {
+                        PredictResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PredictResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -48674,7 +50751,7 @@
                                 case 1: {
                                         if (!(message.results && message.results.length))
                                             message.results = [];
-                                        message.results.push($root.google.cloud.retail.v2.PredictResponse.PredictionResult.decode(reader, reader.uint32()));
+                                        message.results.push($root.google.cloud.retail.v2.PredictResponse.PredictionResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -48692,7 +50769,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -48723,14 +50800,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PredictResponse.verify = function verify(message) {
+                        PredictResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.results != null && message.hasOwnProperty("results")) {
                                 if (!Array.isArray(message.results))
                                     return "results: array expected";
                                 for (var i = 0; i < message.results.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.PredictResponse.PredictionResult.verify(message.results[i]);
+                                    var error = $root.google.cloud.retail.v2.PredictResponse.PredictionResult.verify(message.results[i], long + 1);
                                     if (error)
                                         return "results." + error;
                                 }
@@ -48759,9 +50840,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PredictResponse} PredictResponse
                          */
-                        PredictResponse.fromObject = function fromObject(object) {
+                        PredictResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PredictResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PredictResponse();
                             if (object.results) {
                                 if (!Array.isArray(object.results))
@@ -48770,7 +50855,7 @@
                                 for (var i = 0; i < object.results.length; ++i) {
                                     if (typeof object.results[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.PredictResponse.results: object expected");
-                                    message.results[i] = $root.google.cloud.retail.v2.PredictResponse.PredictionResult.fromObject(object.results[i]);
+                                    message.results[i] = $root.google.cloud.retail.v2.PredictResponse.PredictionResult.fromObject(object.results[i], long + 1);
                                 }
                             }
                             if (object.attributionToken != null)
@@ -48873,7 +50958,7 @@
                                 this.metadata = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -48951,9 +51036,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PredictionResult.decode = function decode(reader, length, error) {
+                            PredictionResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PredictResponse.PredictionResult(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -48977,18 +51066,20 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32());
+                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.metadata, key);
                                             message.metadata[key] = value;
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -49019,9 +51110,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PredictionResult.verify = function verify(message) {
+                            PredictionResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.id != null && message.hasOwnProperty("id"))
                                     if (!$util.isString(message.id))
                                         return "id: string expected";
@@ -49030,7 +51125,7 @@
                                         return "metadata: object expected";
                                     var key = Object.keys(message.metadata);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.protobuf.Value.verify(message.metadata[key[i]]);
+                                        var error = $root.google.protobuf.Value.verify(message.metadata[key[i]], long + 1);
                                         if (error)
                                             return "metadata." + error;
                                     }
@@ -49046,9 +51141,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2.PredictResponse.PredictionResult} PredictionResult
                              */
-                            PredictionResult.fromObject = function fromObject(object) {
+                            PredictionResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2.PredictResponse.PredictionResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2.PredictResponse.PredictionResult();
                                 if (object.id != null)
                                     message.id = String(object.id);
@@ -49057,9 +51156,11 @@
                                         throw TypeError(".google.cloud.retail.v2.PredictResponse.PredictionResult.metadata: object expected");
                                     message.metadata = {};
                                     for (var keys = Object.keys(object.metadata), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.metadata, keys[i]);
                                         if (typeof object.metadata[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2.PredictResponse.PredictionResult.metadata: object expected");
-                                        message.metadata[keys[i]] = $root.google.protobuf.Value.fromObject(object.metadata[keys[i]]);
+                                        message.metadata[keys[i]] = $root.google.protobuf.Value.fromObject(object.metadata[keys[i]], long + 1);
                                     }
                                 }
                                 return message;
@@ -49087,8 +51188,11 @@
                                 var keys2;
                                 if (message.metadata && (keys2 = Object.keys(message.metadata)).length) {
                                     object.metadata = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.metadata, keys2[j]);
                                         object.metadata[keys2[j]] = $root.google.protobuf.Value.toObject(message.metadata[keys2[j]], options);
+                                    }
                                 }
                                 return object;
                             };
@@ -49578,7 +51682,7 @@
                         function CreateProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -49663,9 +51767,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateProductRequest.decode = function decode(reader, length, error) {
+                        CreateProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CreateProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -49677,7 +51785,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.product = $root.google.cloud.retail.v2.Product.decode(reader, reader.uint32());
+                                        message.product = $root.google.cloud.retail.v2.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -49685,7 +51793,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -49716,14 +51824,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateProductRequest.verify = function verify(message) {
+                        CreateProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.product != null && message.hasOwnProperty("product")) {
-                                var error = $root.google.cloud.retail.v2.Product.verify(message.product);
+                                var error = $root.google.cloud.retail.v2.Product.verify(message.product, long + 1);
                                 if (error)
                                     return "product." + error;
                             }
@@ -49741,16 +51853,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CreateProductRequest} CreateProductRequest
                          */
-                        CreateProductRequest.fromObject = function fromObject(object) {
+                        CreateProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CreateProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CreateProductRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.product != null) {
                                 if (typeof object.product !== "object")
                                     throw TypeError(".google.cloud.retail.v2.CreateProductRequest.product: object expected");
-                                message.product = $root.google.cloud.retail.v2.Product.fromObject(object.product);
+                                message.product = $root.google.cloud.retail.v2.Product.fromObject(object.product, long + 1);
                             }
                             if (object.productId != null)
                                 message.productId = String(object.productId);
@@ -49833,7 +51949,7 @@
                         function GetProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -49898,9 +52014,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetProductRequest.decode = function decode(reader, length, error) {
+                        GetProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GetProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -49912,7 +52032,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -49943,9 +52063,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetProductRequest.verify = function verify(message) {
+                        GetProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -49960,9 +52084,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GetProductRequest} GetProductRequest
                          */
-                        GetProductRequest.fromObject = function fromObject(object) {
+                        GetProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GetProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GetProductRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -50040,7 +52168,7 @@
                         function UpdateProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -50125,9 +52253,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateProductRequest.decode = function decode(reader, length, error) {
+                        UpdateProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UpdateProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -50135,11 +52267,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.product = $root.google.cloud.retail.v2.Product.decode(reader, reader.uint32());
+                                        message.product = $root.google.cloud.retail.v2.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -50147,7 +52279,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -50178,16 +52310,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateProductRequest.verify = function verify(message) {
+                        UpdateProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product")) {
-                                var error = $root.google.cloud.retail.v2.Product.verify(message.product);
+                                var error = $root.google.cloud.retail.v2.Product.verify(message.product, long + 1);
                                 if (error)
                                     return "product." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -50205,19 +52341,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UpdateProductRequest} UpdateProductRequest
                          */
-                        UpdateProductRequest.fromObject = function fromObject(object) {
+                        UpdateProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UpdateProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UpdateProductRequest();
                             if (object.product != null) {
                                 if (typeof object.product !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateProductRequest.product: object expected");
-                                message.product = $root.google.cloud.retail.v2.Product.fromObject(object.product);
+                                message.product = $root.google.cloud.retail.v2.Product.fromObject(object.product, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateProductRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -50300,7 +52440,7 @@
                         function DeleteProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -50365,9 +52505,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteProductRequest.decode = function decode(reader, length, error) {
+                        DeleteProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.DeleteProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -50379,7 +52523,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -50410,9 +52554,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteProductRequest.verify = function verify(message) {
+                        DeleteProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -50427,9 +52575,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.DeleteProductRequest} DeleteProductRequest
                          */
-                        DeleteProductRequest.fromObject = function fromObject(object) {
+                        DeleteProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.DeleteProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.DeleteProductRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -50509,7 +52661,7 @@
                         function ListProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -50614,9 +52766,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListProductsRequest.decode = function decode(reader, length, error) {
+                        ListProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -50640,11 +52796,11 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.readMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.readMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -50675,9 +52831,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListProductsRequest.verify = function verify(message) {
+                        ListProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -50691,7 +52851,7 @@
                                 if (!$util.isString(message.filter))
                                     return "filter: string expected";
                             if (message.readMask != null && message.hasOwnProperty("readMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.readMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.readMask, long + 1);
                                 if (error)
                                     return "readMask." + error;
                             }
@@ -50706,9 +52866,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListProductsRequest} ListProductsRequest
                          */
-                        ListProductsRequest.fromObject = function fromObject(object) {
+                        ListProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -50721,7 +52885,7 @@
                             if (object.readMask != null) {
                                 if (typeof object.readMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ListProductsRequest.readMask: object expected");
-                                message.readMask = $root.google.protobuf.FieldMask.fromObject(object.readMask);
+                                message.readMask = $root.google.protobuf.FieldMask.fromObject(object.readMask, long + 1);
                             }
                             return message;
                         };
@@ -50810,7 +52974,7 @@
                             this.products = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -50886,9 +53050,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListProductsResponse.decode = function decode(reader, length, error) {
+                        ListProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -50898,7 +53066,7 @@
                                 case 1: {
                                         if (!(message.products && message.products.length))
                                             message.products = [];
-                                        message.products.push($root.google.cloud.retail.v2.Product.decode(reader, reader.uint32()));
+                                        message.products.push($root.google.cloud.retail.v2.Product.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -50906,7 +53074,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -50937,14 +53105,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListProductsResponse.verify = function verify(message) {
+                        ListProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.products != null && message.hasOwnProperty("products")) {
                                 if (!Array.isArray(message.products))
                                     return "products: array expected";
                                 for (var i = 0; i < message.products.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.Product.verify(message.products[i]);
+                                    var error = $root.google.cloud.retail.v2.Product.verify(message.products[i], long + 1);
                                     if (error)
                                         return "products." + error;
                                 }
@@ -50963,9 +53135,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListProductsResponse} ListProductsResponse
                          */
-                        ListProductsResponse.fromObject = function fromObject(object) {
+                        ListProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListProductsResponse();
                             if (object.products) {
                                 if (!Array.isArray(object.products))
@@ -50974,7 +53150,7 @@
                                 for (var i = 0; i < object.products.length; ++i) {
                                     if (typeof object.products[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ListProductsResponse.products: object expected");
-                                    message.products[i] = $root.google.cloud.retail.v2.Product.fromObject(object.products[i]);
+                                    message.products[i] = $root.google.cloud.retail.v2.Product.fromObject(object.products[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -51061,7 +53237,7 @@
                         function SetInventoryRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -51156,9 +53332,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetInventoryRequest.decode = function decode(reader, length, error) {
+                        SetInventoryRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SetInventoryRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -51166,15 +53346,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.inventory = $root.google.cloud.retail.v2.Product.decode(reader, reader.uint32());
+                                        message.inventory = $root.google.cloud.retail.v2.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.setMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.setMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
@@ -51182,7 +53362,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -51213,21 +53393,25 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetInventoryRequest.verify = function verify(message) {
+                        SetInventoryRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.inventory != null && message.hasOwnProperty("inventory")) {
-                                var error = $root.google.cloud.retail.v2.Product.verify(message.inventory);
+                                var error = $root.google.cloud.retail.v2.Product.verify(message.inventory, long + 1);
                                 if (error)
                                     return "inventory." + error;
                             }
                             if (message.setMask != null && message.hasOwnProperty("setMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.setMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.setMask, long + 1);
                                 if (error)
                                     return "setMask." + error;
                             }
                             if (message.setTime != null && message.hasOwnProperty("setTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.setTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.setTime, long + 1);
                                 if (error)
                                     return "setTime." + error;
                             }
@@ -51245,24 +53429,28 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.SetInventoryRequest} SetInventoryRequest
                          */
-                        SetInventoryRequest.fromObject = function fromObject(object) {
+                        SetInventoryRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.SetInventoryRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.SetInventoryRequest();
                             if (object.inventory != null) {
                                 if (typeof object.inventory !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SetInventoryRequest.inventory: object expected");
-                                message.inventory = $root.google.cloud.retail.v2.Product.fromObject(object.inventory);
+                                message.inventory = $root.google.cloud.retail.v2.Product.fromObject(object.inventory, long + 1);
                             }
                             if (object.setMask != null) {
                                 if (typeof object.setMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SetInventoryRequest.setMask: object expected");
-                                message.setMask = $root.google.protobuf.FieldMask.fromObject(object.setMask);
+                                message.setMask = $root.google.protobuf.FieldMask.fromObject(object.setMask, long + 1);
                             }
                             if (object.setTime != null) {
                                 if (typeof object.setTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.SetInventoryRequest.setTime: object expected");
-                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime);
+                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -51347,7 +53535,7 @@
                         function SetInventoryMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -51402,9 +53590,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetInventoryMetadata.decode = function decode(reader, length, error) {
+                        SetInventoryMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SetInventoryMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -51412,7 +53604,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -51443,9 +53635,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetInventoryMetadata.verify = function verify(message) {
+                        SetInventoryMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -51457,9 +53653,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.SetInventoryMetadata} SetInventoryMetadata
                          */
-                        SetInventoryMetadata.fromObject = function fromObject(object) {
+                        SetInventoryMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.SetInventoryMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.SetInventoryMetadata();
                         };
     
@@ -51524,7 +53724,7 @@
                         function SetInventoryResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -51579,9 +53779,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetInventoryResponse.decode = function decode(reader, length, error) {
+                        SetInventoryResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.SetInventoryResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -51589,7 +53793,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -51620,9 +53824,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetInventoryResponse.verify = function verify(message) {
+                        SetInventoryResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -51634,9 +53842,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.SetInventoryResponse} SetInventoryResponse
                          */
-                        SetInventoryResponse.fromObject = function fromObject(object) {
+                        SetInventoryResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.SetInventoryResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.SetInventoryResponse();
                         };
     
@@ -51707,7 +53919,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -51813,9 +54025,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddFulfillmentPlacesRequest.decode = function decode(reader, length, error) {
+                        AddFulfillmentPlacesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.AddFulfillmentPlacesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -51837,7 +54053,7 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -51845,7 +54061,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -51876,9 +54092,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddFulfillmentPlacesRequest.verify = function verify(message) {
+                        AddFulfillmentPlacesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -51893,7 +54113,7 @@
                                         return "placeIds: string[] expected";
                             }
                             if (message.addTime != null && message.hasOwnProperty("addTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.addTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.addTime, long + 1);
                                 if (error)
                                     return "addTime." + error;
                             }
@@ -51911,9 +54131,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.AddFulfillmentPlacesRequest} AddFulfillmentPlacesRequest
                          */
-                        AddFulfillmentPlacesRequest.fromObject = function fromObject(object) {
+                        AddFulfillmentPlacesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.AddFulfillmentPlacesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.AddFulfillmentPlacesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -51929,7 +54153,7 @@
                             if (object.addTime != null) {
                                 if (typeof object.addTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.AddFulfillmentPlacesRequest.addTime: object expected");
-                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime);
+                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -52021,7 +54245,7 @@
                         function AddFulfillmentPlacesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -52076,9 +54300,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddFulfillmentPlacesMetadata.decode = function decode(reader, length, error) {
+                        AddFulfillmentPlacesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.AddFulfillmentPlacesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -52086,7 +54314,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -52117,9 +54345,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddFulfillmentPlacesMetadata.verify = function verify(message) {
+                        AddFulfillmentPlacesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -52131,9 +54363,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.AddFulfillmentPlacesMetadata} AddFulfillmentPlacesMetadata
                          */
-                        AddFulfillmentPlacesMetadata.fromObject = function fromObject(object) {
+                        AddFulfillmentPlacesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.AddFulfillmentPlacesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.AddFulfillmentPlacesMetadata();
                         };
     
@@ -52198,7 +54434,7 @@
                         function AddFulfillmentPlacesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -52253,9 +54489,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddFulfillmentPlacesResponse.decode = function decode(reader, length, error) {
+                        AddFulfillmentPlacesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.AddFulfillmentPlacesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -52263,7 +54503,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -52294,9 +54534,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddFulfillmentPlacesResponse.verify = function verify(message) {
+                        AddFulfillmentPlacesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -52308,9 +54552,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.AddFulfillmentPlacesResponse} AddFulfillmentPlacesResponse
                          */
-                        AddFulfillmentPlacesResponse.fromObject = function fromObject(object) {
+                        AddFulfillmentPlacesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.AddFulfillmentPlacesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.AddFulfillmentPlacesResponse();
                         };
     
@@ -52381,7 +54629,7 @@
                             this.localInventories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -52487,9 +54735,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddLocalInventoriesRequest.decode = function decode(reader, length, error) {
+                        AddLocalInventoriesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.AddLocalInventoriesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -52503,15 +54755,15 @@
                                 case 2: {
                                         if (!(message.localInventories && message.localInventories.length))
                                             message.localInventories = [];
-                                        message.localInventories.push($root.google.cloud.retail.v2.LocalInventory.decode(reader, reader.uint32()));
+                                        message.localInventories.push($root.google.cloud.retail.v2.LocalInventory.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 4: {
-                                        message.addMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.addMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
-                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
@@ -52519,7 +54771,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -52550,9 +54802,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddLocalInventoriesRequest.verify = function verify(message) {
+                        AddLocalInventoriesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -52560,18 +54816,18 @@
                                 if (!Array.isArray(message.localInventories))
                                     return "localInventories: array expected";
                                 for (var i = 0; i < message.localInventories.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.LocalInventory.verify(message.localInventories[i]);
+                                    var error = $root.google.cloud.retail.v2.LocalInventory.verify(message.localInventories[i], long + 1);
                                     if (error)
                                         return "localInventories." + error;
                                 }
                             }
                             if (message.addMask != null && message.hasOwnProperty("addMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.addMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.addMask, long + 1);
                                 if (error)
                                     return "addMask." + error;
                             }
                             if (message.addTime != null && message.hasOwnProperty("addTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.addTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.addTime, long + 1);
                                 if (error)
                                     return "addTime." + error;
                             }
@@ -52589,9 +54845,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.AddLocalInventoriesRequest} AddLocalInventoriesRequest
                          */
-                        AddLocalInventoriesRequest.fromObject = function fromObject(object) {
+                        AddLocalInventoriesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.AddLocalInventoriesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.AddLocalInventoriesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -52602,18 +54862,18 @@
                                 for (var i = 0; i < object.localInventories.length; ++i) {
                                     if (typeof object.localInventories[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.AddLocalInventoriesRequest.localInventories: object expected");
-                                    message.localInventories[i] = $root.google.cloud.retail.v2.LocalInventory.fromObject(object.localInventories[i]);
+                                    message.localInventories[i] = $root.google.cloud.retail.v2.LocalInventory.fromObject(object.localInventories[i], long + 1);
                                 }
                             }
                             if (object.addMask != null) {
                                 if (typeof object.addMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.AddLocalInventoriesRequest.addMask: object expected");
-                                message.addMask = $root.google.protobuf.FieldMask.fromObject(object.addMask);
+                                message.addMask = $root.google.protobuf.FieldMask.fromObject(object.addMask, long + 1);
                             }
                             if (object.addTime != null) {
                                 if (typeof object.addTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.AddLocalInventoriesRequest.addTime: object expected");
-                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime);
+                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -52705,7 +54965,7 @@
                         function AddLocalInventoriesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -52760,9 +55020,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddLocalInventoriesMetadata.decode = function decode(reader, length, error) {
+                        AddLocalInventoriesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.AddLocalInventoriesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -52770,7 +55034,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -52801,9 +55065,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddLocalInventoriesMetadata.verify = function verify(message) {
+                        AddLocalInventoriesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -52815,9 +55083,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.AddLocalInventoriesMetadata} AddLocalInventoriesMetadata
                          */
-                        AddLocalInventoriesMetadata.fromObject = function fromObject(object) {
+                        AddLocalInventoriesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.AddLocalInventoriesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.AddLocalInventoriesMetadata();
                         };
     
@@ -52882,7 +55154,7 @@
                         function AddLocalInventoriesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -52937,9 +55209,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddLocalInventoriesResponse.decode = function decode(reader, length, error) {
+                        AddLocalInventoriesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.AddLocalInventoriesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -52947,7 +55223,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -52978,9 +55254,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddLocalInventoriesResponse.verify = function verify(message) {
+                        AddLocalInventoriesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -52992,9 +55272,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.AddLocalInventoriesResponse} AddLocalInventoriesResponse
                          */
-                        AddLocalInventoriesResponse.fromObject = function fromObject(object) {
+                        AddLocalInventoriesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.AddLocalInventoriesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.AddLocalInventoriesResponse();
                         };
     
@@ -53064,7 +55348,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -53160,9 +55444,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveLocalInventoriesRequest.decode = function decode(reader, length, error) {
+                        RemoveLocalInventoriesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RemoveLocalInventoriesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -53180,7 +55468,7 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -53188,7 +55476,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -53219,9 +55507,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveLocalInventoriesRequest.verify = function verify(message) {
+                        RemoveLocalInventoriesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -53233,7 +55525,7 @@
                                         return "placeIds: string[] expected";
                             }
                             if (message.removeTime != null && message.hasOwnProperty("removeTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime, long + 1);
                                 if (error)
                                     return "removeTime." + error;
                             }
@@ -53251,9 +55543,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RemoveLocalInventoriesRequest} RemoveLocalInventoriesRequest
                          */
-                        RemoveLocalInventoriesRequest.fromObject = function fromObject(object) {
+                        RemoveLocalInventoriesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RemoveLocalInventoriesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.RemoveLocalInventoriesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -53267,7 +55563,7 @@
                             if (object.removeTime != null) {
                                 if (typeof object.removeTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.RemoveLocalInventoriesRequest.removeTime: object expected");
-                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime);
+                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -53356,7 +55652,7 @@
                         function RemoveLocalInventoriesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -53411,9 +55707,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveLocalInventoriesMetadata.decode = function decode(reader, length, error) {
+                        RemoveLocalInventoriesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RemoveLocalInventoriesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -53421,7 +55721,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -53452,9 +55752,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveLocalInventoriesMetadata.verify = function verify(message) {
+                        RemoveLocalInventoriesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -53466,9 +55770,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RemoveLocalInventoriesMetadata} RemoveLocalInventoriesMetadata
                          */
-                        RemoveLocalInventoriesMetadata.fromObject = function fromObject(object) {
+                        RemoveLocalInventoriesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RemoveLocalInventoriesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.RemoveLocalInventoriesMetadata();
                         };
     
@@ -53533,7 +55841,7 @@
                         function RemoveLocalInventoriesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -53588,9 +55896,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveLocalInventoriesResponse.decode = function decode(reader, length, error) {
+                        RemoveLocalInventoriesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RemoveLocalInventoriesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -53598,7 +55910,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -53629,9 +55941,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveLocalInventoriesResponse.verify = function verify(message) {
+                        RemoveLocalInventoriesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -53643,9 +55959,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RemoveLocalInventoriesResponse} RemoveLocalInventoriesResponse
                          */
-                        RemoveLocalInventoriesResponse.fromObject = function fromObject(object) {
+                        RemoveLocalInventoriesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RemoveLocalInventoriesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.RemoveLocalInventoriesResponse();
                         };
     
@@ -53716,7 +56036,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -53822,9 +56142,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveFulfillmentPlacesRequest.decode = function decode(reader, length, error) {
+                        RemoveFulfillmentPlacesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RemoveFulfillmentPlacesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -53846,7 +56170,7 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -53854,7 +56178,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -53885,9 +56209,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveFulfillmentPlacesRequest.verify = function verify(message) {
+                        RemoveFulfillmentPlacesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -53902,7 +56230,7 @@
                                         return "placeIds: string[] expected";
                             }
                             if (message.removeTime != null && message.hasOwnProperty("removeTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime, long + 1);
                                 if (error)
                                     return "removeTime." + error;
                             }
@@ -53920,9 +56248,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RemoveFulfillmentPlacesRequest} RemoveFulfillmentPlacesRequest
                          */
-                        RemoveFulfillmentPlacesRequest.fromObject = function fromObject(object) {
+                        RemoveFulfillmentPlacesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RemoveFulfillmentPlacesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.RemoveFulfillmentPlacesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -53938,7 +56270,7 @@
                             if (object.removeTime != null) {
                                 if (typeof object.removeTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.RemoveFulfillmentPlacesRequest.removeTime: object expected");
-                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime);
+                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -54030,7 +56362,7 @@
                         function RemoveFulfillmentPlacesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -54085,9 +56417,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveFulfillmentPlacesMetadata.decode = function decode(reader, length, error) {
+                        RemoveFulfillmentPlacesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RemoveFulfillmentPlacesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -54095,7 +56431,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -54126,9 +56462,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveFulfillmentPlacesMetadata.verify = function verify(message) {
+                        RemoveFulfillmentPlacesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -54140,9 +56480,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RemoveFulfillmentPlacesMetadata} RemoveFulfillmentPlacesMetadata
                          */
-                        RemoveFulfillmentPlacesMetadata.fromObject = function fromObject(object) {
+                        RemoveFulfillmentPlacesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RemoveFulfillmentPlacesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.RemoveFulfillmentPlacesMetadata();
                         };
     
@@ -54207,7 +56551,7 @@
                         function RemoveFulfillmentPlacesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -54262,9 +56606,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveFulfillmentPlacesResponse.decode = function decode(reader, length, error) {
+                        RemoveFulfillmentPlacesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RemoveFulfillmentPlacesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -54272,7 +56620,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -54303,9 +56651,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveFulfillmentPlacesResponse.verify = function verify(message) {
+                        RemoveFulfillmentPlacesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -54317,9 +56669,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RemoveFulfillmentPlacesResponse} RemoveFulfillmentPlacesResponse
                          */
-                        RemoveFulfillmentPlacesResponse.fromObject = function fromObject(object) {
+                        RemoveFulfillmentPlacesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RemoveFulfillmentPlacesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.RemoveFulfillmentPlacesResponse();
                         };
     
@@ -54384,7 +56740,7 @@
                         function PurgeMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -54439,9 +56795,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeMetadata.decode = function decode(reader, length, error) {
+                        PurgeMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PurgeMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -54449,7 +56809,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -54480,9 +56840,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeMetadata.verify = function verify(message) {
+                        PurgeMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -54494,9 +56858,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PurgeMetadata} PurgeMetadata
                          */
-                        PurgeMetadata.fromObject = function fromObject(object) {
+                        PurgeMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PurgeMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.PurgeMetadata();
                         };
     
@@ -54565,7 +56933,7 @@
                         function PurgeProductsMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -54660,9 +57028,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeProductsMetadata.decode = function decode(reader, length, error) {
+                        PurgeProductsMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PurgeProductsMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -54670,11 +57042,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -54686,7 +57058,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -54717,16 +57089,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeProductsMetadata.verify = function verify(message) {
+                        PurgeProductsMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -54747,19 +57123,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PurgeProductsMetadata} PurgeProductsMetadata
                          */
-                        PurgeProductsMetadata.fromObject = function fromObject(object) {
+                        PurgeProductsMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PurgeProductsMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PurgeProductsMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.PurgeProductsMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2.PurgeProductsMetadata.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.successCount != null)
                                 if ($util.Long)
@@ -54877,7 +57257,7 @@
                         function PurgeProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -54962,9 +57342,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeProductsRequest.decode = function decode(reader, length, error) {
+                        PurgeProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PurgeProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -54984,7 +57368,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -55015,9 +57399,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeProductsRequest.verify = function verify(message) {
+                        PurgeProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -55038,9 +57426,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PurgeProductsRequest} PurgeProductsRequest
                          */
-                        PurgeProductsRequest.fromObject = function fromObject(object) {
+                        PurgeProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PurgeProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PurgeProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -55129,7 +57521,7 @@
                             this.purgeSample = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -55205,9 +57597,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeProductsResponse.decode = function decode(reader, length, error) {
+                        PurgeProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PurgeProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -55225,7 +57621,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -55256,9 +57652,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeProductsResponse.verify = function verify(message) {
+                        PurgeProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.purgeCount != null && message.hasOwnProperty("purgeCount"))
                                 if (!$util.isInteger(message.purgeCount) && !(message.purgeCount && $util.isInteger(message.purgeCount.low) && $util.isInteger(message.purgeCount.high)))
                                     return "purgeCount: integer|Long expected";
@@ -55280,9 +57680,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PurgeProductsResponse} PurgeProductsResponse
                          */
-                        PurgeProductsResponse.fromObject = function fromObject(object) {
+                        PurgeProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PurgeProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PurgeProductsResponse();
                             if (object.purgeCount != null)
                                 if ($util.Long)
@@ -55388,7 +57792,7 @@
                         function PurgeUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -55473,9 +57877,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeUserEventsRequest.decode = function decode(reader, length, error) {
+                        PurgeUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PurgeUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -55495,7 +57903,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -55526,9 +57934,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeUserEventsRequest.verify = function verify(message) {
+                        PurgeUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -55549,9 +57961,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PurgeUserEventsRequest} PurgeUserEventsRequest
                          */
-                        PurgeUserEventsRequest.fromObject = function fromObject(object) {
+                        PurgeUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PurgeUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PurgeUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -55638,7 +58054,7 @@
                         function PurgeUserEventsResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -55703,9 +58119,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeUserEventsResponse.decode = function decode(reader, length, error) {
+                        PurgeUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.PurgeUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -55717,7 +58137,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -55748,9 +58168,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeUserEventsResponse.verify = function verify(message) {
+                        PurgeUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.purgedEventsCount != null && message.hasOwnProperty("purgedEventsCount"))
                                 if (!$util.isInteger(message.purgedEventsCount) && !(message.purgedEventsCount && $util.isInteger(message.purgedEventsCount.low) && $util.isInteger(message.purgedEventsCount.high)))
                                     return "purgedEventsCount: integer|Long expected";
@@ -55765,9 +58189,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.PurgeUserEventsResponse} PurgeUserEventsResponse
                          */
-                        PurgeUserEventsResponse.fromObject = function fromObject(object) {
+                        PurgeUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.PurgeUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.PurgeUserEventsResponse();
                             if (object.purgedEventsCount != null)
                                 if ($util.Long)
@@ -55886,7 +58314,7 @@
                             this.solutionTypes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -56154,9 +58582,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ServingConfig.decode = function decode(reader, length, error) {
+                        ServingConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ServingConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -56186,7 +58618,7 @@
                                         break;
                                     }
                                 case 6: {
-                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32());
+                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -56254,7 +58686,7 @@
                                         break;
                                     }
                                 case 21: {
-                                        message.personalizationSpec = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32());
+                                        message.personalizationSpec = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
@@ -56269,7 +58701,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -56300,9 +58732,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ServingConfig.verify = function verify(message) {
+                        ServingConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -56323,7 +58759,7 @@
                                         return "facetControlIds: string[] expected";
                             }
                             if (message.dynamicFacetSpec != null && message.hasOwnProperty("dynamicFacetSpec")) {
-                                var error = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec);
+                                var error = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec, long + 1);
                                 if (error)
                                     return "dynamicFacetSpec." + error;
                             }
@@ -56402,7 +58838,7 @@
                                 if (typeof message.ignoreRecsDenylist !== "boolean")
                                     return "ignoreRecsDenylist: boolean expected";
                             if (message.personalizationSpec != null && message.hasOwnProperty("personalizationSpec")) {
-                                var error = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec);
+                                var error = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec, long + 1);
                                 if (error)
                                     return "personalizationSpec." + error;
                             }
@@ -56430,9 +58866,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ServingConfig} ServingConfig
                          */
-                        ServingConfig.fromObject = function fromObject(object) {
+                        ServingConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ServingConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ServingConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -56452,7 +58892,7 @@
                             if (object.dynamicFacetSpec != null) {
                                 if (typeof object.dynamicFacetSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ServingConfig.dynamicFacetSpec: object expected");
-                                message.dynamicFacetSpec = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec);
+                                message.dynamicFacetSpec = $root.google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec, long + 1);
                             }
                             if (object.boostControlIds) {
                                 if (!Array.isArray(object.boostControlIds))
@@ -56539,7 +58979,7 @@
                             if (object.personalizationSpec != null) {
                                 if (typeof object.personalizationSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2.ServingConfig.personalizationSpec: object expected");
-                                message.personalizationSpec = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec);
+                                message.personalizationSpec = $root.google.cloud.retail.v2.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec, long + 1);
                             }
                             if (object.solutionTypes) {
                                 if (!Array.isArray(object.solutionTypes))
@@ -57012,7 +59452,7 @@
                         function CreateServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -57097,9 +59537,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateServingConfigRequest.decode = function decode(reader, length, error) {
+                        CreateServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CreateServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -57111,7 +59555,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.servingConfig = $root.google.cloud.retail.v2.ServingConfig.decode(reader, reader.uint32());
+                                        message.servingConfig = $root.google.cloud.retail.v2.ServingConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -57119,7 +59563,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -57150,14 +59594,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateServingConfigRequest.verify = function verify(message) {
+                        CreateServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig")) {
-                                var error = $root.google.cloud.retail.v2.ServingConfig.verify(message.servingConfig);
+                                var error = $root.google.cloud.retail.v2.ServingConfig.verify(message.servingConfig, long + 1);
                                 if (error)
                                     return "servingConfig." + error;
                             }
@@ -57175,16 +59623,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CreateServingConfigRequest} CreateServingConfigRequest
                          */
-                        CreateServingConfigRequest.fromObject = function fromObject(object) {
+                        CreateServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CreateServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CreateServingConfigRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.servingConfig != null) {
                                 if (typeof object.servingConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.CreateServingConfigRequest.servingConfig: object expected");
-                                message.servingConfig = $root.google.cloud.retail.v2.ServingConfig.fromObject(object.servingConfig);
+                                message.servingConfig = $root.google.cloud.retail.v2.ServingConfig.fromObject(object.servingConfig, long + 1);
                             }
                             if (object.servingConfigId != null)
                                 message.servingConfigId = String(object.servingConfigId);
@@ -57268,7 +59720,7 @@
                         function UpdateServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -57343,9 +59795,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateServingConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.UpdateServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -57353,15 +59809,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.servingConfig = $root.google.cloud.retail.v2.ServingConfig.decode(reader, reader.uint32());
+                                        message.servingConfig = $root.google.cloud.retail.v2.ServingConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -57392,16 +59848,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateServingConfigRequest.verify = function verify(message) {
+                        UpdateServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig")) {
-                                var error = $root.google.cloud.retail.v2.ServingConfig.verify(message.servingConfig);
+                                var error = $root.google.cloud.retail.v2.ServingConfig.verify(message.servingConfig, long + 1);
                                 if (error)
                                     return "servingConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -57416,19 +59876,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.UpdateServingConfigRequest} UpdateServingConfigRequest
                          */
-                        UpdateServingConfigRequest.fromObject = function fromObject(object) {
+                        UpdateServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.UpdateServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.UpdateServingConfigRequest();
                             if (object.servingConfig != null) {
                                 if (typeof object.servingConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateServingConfigRequest.servingConfig: object expected");
-                                message.servingConfig = $root.google.cloud.retail.v2.ServingConfig.fromObject(object.servingConfig);
+                                message.servingConfig = $root.google.cloud.retail.v2.ServingConfig.fromObject(object.servingConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2.UpdateServingConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -57506,7 +59970,7 @@
                         function DeleteServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -57571,9 +60035,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteServingConfigRequest.decode = function decode(reader, length, error) {
+                        DeleteServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.DeleteServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -57585,7 +60053,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -57616,9 +60084,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteServingConfigRequest.verify = function verify(message) {
+                        DeleteServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -57633,9 +60105,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.DeleteServingConfigRequest} DeleteServingConfigRequest
                          */
-                        DeleteServingConfigRequest.fromObject = function fromObject(object) {
+                        DeleteServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.DeleteServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.DeleteServingConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -57711,7 +60187,7 @@
                         function GetServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -57776,9 +60252,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetServingConfigRequest.decode = function decode(reader, length, error) {
+                        GetServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.GetServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -57790,7 +60270,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -57821,9 +60301,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetServingConfigRequest.verify = function verify(message) {
+                        GetServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -57838,9 +60322,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.GetServingConfigRequest} GetServingConfigRequest
                          */
-                        GetServingConfigRequest.fromObject = function fromObject(object) {
+                        GetServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.GetServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.GetServingConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -57918,7 +60406,7 @@
                         function ListServingConfigsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -58003,9 +60491,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListServingConfigsRequest.decode = function decode(reader, length, error) {
+                        ListServingConfigsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListServingConfigsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -58025,7 +60517,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -58056,9 +60548,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListServingConfigsRequest.verify = function verify(message) {
+                        ListServingConfigsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -58079,9 +60575,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListServingConfigsRequest} ListServingConfigsRequest
                          */
-                        ListServingConfigsRequest.fromObject = function fromObject(object) {
+                        ListServingConfigsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListServingConfigsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListServingConfigsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -58170,7 +60670,7 @@
                             this.servingConfigs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -58246,9 +60746,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListServingConfigsResponse.decode = function decode(reader, length, error) {
+                        ListServingConfigsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.ListServingConfigsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -58258,7 +60762,7 @@
                                 case 1: {
                                         if (!(message.servingConfigs && message.servingConfigs.length))
                                             message.servingConfigs = [];
-                                        message.servingConfigs.push($root.google.cloud.retail.v2.ServingConfig.decode(reader, reader.uint32()));
+                                        message.servingConfigs.push($root.google.cloud.retail.v2.ServingConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -58266,7 +60770,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -58297,14 +60801,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListServingConfigsResponse.verify = function verify(message) {
+                        ListServingConfigsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfigs != null && message.hasOwnProperty("servingConfigs")) {
                                 if (!Array.isArray(message.servingConfigs))
                                     return "servingConfigs: array expected";
                                 for (var i = 0; i < message.servingConfigs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2.ServingConfig.verify(message.servingConfigs[i]);
+                                    var error = $root.google.cloud.retail.v2.ServingConfig.verify(message.servingConfigs[i], long + 1);
                                     if (error)
                                         return "servingConfigs." + error;
                                 }
@@ -58323,9 +60831,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.ListServingConfigsResponse} ListServingConfigsResponse
                          */
-                        ListServingConfigsResponse.fromObject = function fromObject(object) {
+                        ListServingConfigsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.ListServingConfigsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.ListServingConfigsResponse();
                             if (object.servingConfigs) {
                                 if (!Array.isArray(object.servingConfigs))
@@ -58334,7 +60846,7 @@
                                 for (var i = 0; i < object.servingConfigs.length; ++i) {
                                     if (typeof object.servingConfigs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2.ListServingConfigsResponse.servingConfigs: object expected");
-                                    message.servingConfigs[i] = $root.google.cloud.retail.v2.ServingConfig.fromObject(object.servingConfigs[i]);
+                                    message.servingConfigs[i] = $root.google.cloud.retail.v2.ServingConfig.fromObject(object.servingConfigs[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -58419,7 +60931,7 @@
                         function AddControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -58494,9 +61006,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddControlRequest.decode = function decode(reader, length, error) {
+                        AddControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.AddControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -58512,7 +61028,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -58543,9 +61059,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddControlRequest.verify = function verify(message) {
+                        AddControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig"))
                                 if (!$util.isString(message.servingConfig))
                                     return "servingConfig: string expected";
@@ -58563,9 +61083,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.AddControlRequest} AddControlRequest
                          */
-                        AddControlRequest.fromObject = function fromObject(object) {
+                        AddControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.AddControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.AddControlRequest();
                             if (object.servingConfig != null)
                                 message.servingConfig = String(object.servingConfig);
@@ -58648,7 +61172,7 @@
                         function RemoveControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -58723,9 +61247,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveControlRequest.decode = function decode(reader, length, error) {
+                        RemoveControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RemoveControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -58741,7 +61269,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -58772,9 +61300,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveControlRequest.verify = function verify(message) {
+                        RemoveControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig"))
                                 if (!$util.isString(message.servingConfig))
                                     return "servingConfig: string expected";
@@ -58792,9 +61324,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RemoveControlRequest} RemoveControlRequest
                          */
-                        RemoveControlRequest.fromObject = function fromObject(object) {
+                        RemoveControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RemoveControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.RemoveControlRequest();
                             if (object.servingConfig != null)
                                 message.servingConfig = String(object.servingConfig);
@@ -59078,7 +61614,7 @@
                         function WriteUserEventRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -59163,9 +61699,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        WriteUserEventRequest.decode = function decode(reader, length, error) {
+                        WriteUserEventRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.WriteUserEventRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -59177,7 +61717,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.userEvent = $root.google.cloud.retail.v2.UserEvent.decode(reader, reader.uint32());
+                                        message.userEvent = $root.google.cloud.retail.v2.UserEvent.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -59185,7 +61725,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -59216,14 +61756,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        WriteUserEventRequest.verify = function verify(message) {
+                        WriteUserEventRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.userEvent != null && message.hasOwnProperty("userEvent")) {
-                                var error = $root.google.cloud.retail.v2.UserEvent.verify(message.userEvent);
+                                var error = $root.google.cloud.retail.v2.UserEvent.verify(message.userEvent, long + 1);
                                 if (error)
                                     return "userEvent." + error;
                             }
@@ -59241,16 +61785,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.WriteUserEventRequest} WriteUserEventRequest
                          */
-                        WriteUserEventRequest.fromObject = function fromObject(object) {
+                        WriteUserEventRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.WriteUserEventRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.WriteUserEventRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.userEvent != null) {
                                 if (typeof object.userEvent !== "object")
                                     throw TypeError(".google.cloud.retail.v2.WriteUserEventRequest.userEvent: object expected");
-                                message.userEvent = $root.google.cloud.retail.v2.UserEvent.fromObject(object.userEvent);
+                                message.userEvent = $root.google.cloud.retail.v2.UserEvent.fromObject(object.userEvent, long + 1);
                             }
                             if (object.writeAsync != null)
                                 message.writeAsync = Boolean(object.writeAsync);
@@ -59338,7 +61886,7 @@
                         function CollectUserEventRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -59467,9 +62015,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CollectUserEventRequest.decode = function decode(reader, length, error) {
+                        CollectUserEventRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.CollectUserEventRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -59501,7 +62053,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -59532,9 +62084,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CollectUserEventRequest.verify = function verify(message) {
+                        CollectUserEventRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.prebuiltRule != null && message.hasOwnProperty("prebuiltRule")) {
                                 properties.conversionRule = 1;
@@ -59567,9 +62123,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.CollectUserEventRequest} CollectUserEventRequest
                          */
-                        CollectUserEventRequest.fromObject = function fromObject(object) {
+                        CollectUserEventRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.CollectUserEventRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.CollectUserEventRequest();
                             if (object.prebuiltRule != null)
                                 message.prebuiltRule = String(object.prebuiltRule);
@@ -59688,7 +62248,7 @@
                         function RejoinUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -59763,9 +62323,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RejoinUserEventsRequest.decode = function decode(reader, length, error) {
+                        RejoinUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RejoinUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -59781,7 +62345,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -59812,9 +62376,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RejoinUserEventsRequest.verify = function verify(message) {
+                        RejoinUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -59838,9 +62406,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RejoinUserEventsRequest} RejoinUserEventsRequest
                          */
-                        RejoinUserEventsRequest.fromObject = function fromObject(object) {
+                        RejoinUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RejoinUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.RejoinUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -59956,7 +62528,7 @@
                         function RejoinUserEventsResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -60021,9 +62593,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RejoinUserEventsResponse.decode = function decode(reader, length, error) {
+                        RejoinUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RejoinUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -60035,7 +62611,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -60066,9 +62642,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RejoinUserEventsResponse.verify = function verify(message) {
+                        RejoinUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.rejoinedUserEventsCount != null && message.hasOwnProperty("rejoinedUserEventsCount"))
                                 if (!$util.isInteger(message.rejoinedUserEventsCount) && !(message.rejoinedUserEventsCount && $util.isInteger(message.rejoinedUserEventsCount.low) && $util.isInteger(message.rejoinedUserEventsCount.high)))
                                     return "rejoinedUserEventsCount: integer|Long expected";
@@ -60083,9 +62663,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RejoinUserEventsResponse} RejoinUserEventsResponse
                          */
-                        RejoinUserEventsResponse.fromObject = function fromObject(object) {
+                        RejoinUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RejoinUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2.RejoinUserEventsResponse();
                             if (object.rejoinedUserEventsCount != null)
                                 if ($util.Long)
@@ -60174,7 +62758,7 @@
                         function RejoinUserEventsMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -60229,9 +62813,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RejoinUserEventsMetadata.decode = function decode(reader, length, error) {
+                        RejoinUserEventsMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2.RejoinUserEventsMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -60239,7 +62827,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -60270,9 +62858,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RejoinUserEventsMetadata.verify = function verify(message) {
+                        RejoinUserEventsMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -60284,9 +62876,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2.RejoinUserEventsMetadata} RejoinUserEventsMetadata
                          */
-                        RejoinUserEventsMetadata.fromObject = function fromObject(object) {
+                        RejoinUserEventsMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2.RejoinUserEventsMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2.RejoinUserEventsMetadata();
                         };
     
@@ -60433,7 +63029,7 @@
                         function OutputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -60522,9 +63118,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        OutputConfig.decode = function decode(reader, length, error) {
+                        OutputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.OutputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -60532,15 +63132,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.gcsDestination = $root.google.cloud.retail.v2alpha.OutputConfig.GcsDestination.decode(reader, reader.uint32());
+                                        message.gcsDestination = $root.google.cloud.retail.v2alpha.OutputConfig.GcsDestination.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.bigqueryDestination = $root.google.cloud.retail.v2alpha.OutputConfig.BigQueryDestination.decode(reader, reader.uint32());
+                                        message.bigqueryDestination = $root.google.cloud.retail.v2alpha.OutputConfig.BigQueryDestination.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -60571,14 +63171,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        OutputConfig.verify = function verify(message) {
+                        OutputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsDestination != null && message.hasOwnProperty("gcsDestination")) {
                                 properties.destination = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.OutputConfig.GcsDestination.verify(message.gcsDestination);
+                                    var error = $root.google.cloud.retail.v2alpha.OutputConfig.GcsDestination.verify(message.gcsDestination, long + 1);
                                     if (error)
                                         return "gcsDestination." + error;
                                 }
@@ -60588,7 +63192,7 @@
                                     return "destination: multiple values";
                                 properties.destination = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.OutputConfig.BigQueryDestination.verify(message.bigqueryDestination);
+                                    var error = $root.google.cloud.retail.v2alpha.OutputConfig.BigQueryDestination.verify(message.bigqueryDestination, long + 1);
                                     if (error)
                                         return "bigqueryDestination." + error;
                                 }
@@ -60604,19 +63208,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.OutputConfig} OutputConfig
                          */
-                        OutputConfig.fromObject = function fromObject(object) {
+                        OutputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.OutputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.OutputConfig();
                             if (object.gcsDestination != null) {
                                 if (typeof object.gcsDestination !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.OutputConfig.gcsDestination: object expected");
-                                message.gcsDestination = $root.google.cloud.retail.v2alpha.OutputConfig.GcsDestination.fromObject(object.gcsDestination);
+                                message.gcsDestination = $root.google.cloud.retail.v2alpha.OutputConfig.GcsDestination.fromObject(object.gcsDestination, long + 1);
                             }
                             if (object.bigqueryDestination != null) {
                                 if (typeof object.bigqueryDestination !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.OutputConfig.bigqueryDestination: object expected");
-                                message.bigqueryDestination = $root.google.cloud.retail.v2alpha.OutputConfig.BigQueryDestination.fromObject(object.bigqueryDestination);
+                                message.bigqueryDestination = $root.google.cloud.retail.v2alpha.OutputConfig.BigQueryDestination.fromObject(object.bigqueryDestination, long + 1);
                             }
                             return message;
                         };
@@ -60693,7 +63301,7 @@
                             function GcsDestination(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -60758,9 +63366,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GcsDestination.decode = function decode(reader, length, error) {
+                            GcsDestination.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.OutputConfig.GcsDestination();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -60772,7 +63384,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -60803,9 +63415,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GcsDestination.verify = function verify(message) {
+                            GcsDestination.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.outputUriPrefix != null && message.hasOwnProperty("outputUriPrefix"))
                                     if (!$util.isString(message.outputUriPrefix))
                                         return "outputUriPrefix: string expected";
@@ -60820,9 +63436,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.OutputConfig.GcsDestination} GcsDestination
                              */
-                            GcsDestination.fromObject = function fromObject(object) {
+                            GcsDestination.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.OutputConfig.GcsDestination)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.OutputConfig.GcsDestination();
                                 if (object.outputUriPrefix != null)
                                     message.outputUriPrefix = String(object.outputUriPrefix);
@@ -60900,7 +63520,7 @@
                             function BigQueryDestination(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -60985,9 +63605,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BigQueryDestination.decode = function decode(reader, length, error) {
+                            BigQueryDestination.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.OutputConfig.BigQueryDestination();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -61007,7 +63631,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -61038,9 +63662,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BigQueryDestination.verify = function verify(message) {
+                            BigQueryDestination.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.datasetId != null && message.hasOwnProperty("datasetId"))
                                     if (!$util.isString(message.datasetId))
                                         return "datasetId: string expected";
@@ -61061,9 +63689,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.OutputConfig.BigQueryDestination} BigQueryDestination
                              */
-                            BigQueryDestination.fromObject = function fromObject(object) {
+                            BigQueryDestination.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.OutputConfig.BigQueryDestination)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.OutputConfig.BigQueryDestination();
                                 if (object.datasetId != null)
                                     message.datasetId = String(object.datasetId);
@@ -61153,7 +63785,7 @@
                         function ExportErrorsConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -61232,9 +63864,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportErrorsConfig.decode = function decode(reader, length, error) {
+                        ExportErrorsConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ExportErrorsConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -61246,7 +63882,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -61277,9 +63913,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportErrorsConfig.verify = function verify(message) {
+                        ExportErrorsConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsPrefix != null && message.hasOwnProperty("gcsPrefix")) {
                                 properties.destination = 1;
@@ -61297,9 +63937,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ExportErrorsConfig} ExportErrorsConfig
                          */
-                        ExportErrorsConfig.fromObject = function fromObject(object) {
+                        ExportErrorsConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ExportErrorsConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ExportErrorsConfig();
                             if (object.gcsPrefix != null)
                                 message.gcsPrefix = String(object.gcsPrefix);
@@ -61378,7 +64022,7 @@
                         function ExportProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -61463,9 +64107,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportProductsRequest.decode = function decode(reader, length, error) {
+                        ExportProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ExportProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -61477,7 +64125,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.decode(reader, reader.uint32());
+                                        message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -61485,7 +64133,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -61516,14 +64164,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportProductsRequest.verify = function verify(message) {
+                        ExportProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.outputConfig != null && message.hasOwnProperty("outputConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.OutputConfig.verify(message.outputConfig);
+                                var error = $root.google.cloud.retail.v2alpha.OutputConfig.verify(message.outputConfig, long + 1);
                                 if (error)
                                     return "outputConfig." + error;
                             }
@@ -61541,16 +64193,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ExportProductsRequest} ExportProductsRequest
                          */
-                        ExportProductsRequest.fromObject = function fromObject(object) {
+                        ExportProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ExportProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ExportProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.outputConfig != null) {
                                 if (typeof object.outputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportProductsRequest.outputConfig: object expected");
-                                message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.fromObject(object.outputConfig);
+                                message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.fromObject(object.outputConfig, long + 1);
                             }
                             if (object.filter != null)
                                 message.filter = String(object.filter);
@@ -61635,7 +64291,7 @@
                         function ExportUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -61720,9 +64376,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportUserEventsRequest.decode = function decode(reader, length, error) {
+                        ExportUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ExportUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -61734,7 +64394,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.decode(reader, reader.uint32());
+                                        message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -61742,7 +64402,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -61773,14 +64433,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportUserEventsRequest.verify = function verify(message) {
+                        ExportUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.outputConfig != null && message.hasOwnProperty("outputConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.OutputConfig.verify(message.outputConfig);
+                                var error = $root.google.cloud.retail.v2alpha.OutputConfig.verify(message.outputConfig, long + 1);
                                 if (error)
                                     return "outputConfig." + error;
                             }
@@ -61798,16 +64462,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ExportUserEventsRequest} ExportUserEventsRequest
                          */
-                        ExportUserEventsRequest.fromObject = function fromObject(object) {
+                        ExportUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ExportUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ExportUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.outputConfig != null) {
                                 if (typeof object.outputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportUserEventsRequest.outputConfig: object expected");
-                                message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.fromObject(object.outputConfig);
+                                message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.fromObject(object.outputConfig, long + 1);
                             }
                             if (object.filter != null)
                                 message.filter = String(object.filter);
@@ -61892,7 +64560,7 @@
                         function ExportAnalyticsMetricsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -61977,9 +64645,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportAnalyticsMetricsRequest.decode = function decode(reader, length, error) {
+                        ExportAnalyticsMetricsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ExportAnalyticsMetricsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -61991,7 +64663,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.decode(reader, reader.uint32());
+                                        message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -61999,7 +64671,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -62030,14 +64702,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportAnalyticsMetricsRequest.verify = function verify(message) {
+                        ExportAnalyticsMetricsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
                             if (message.outputConfig != null && message.hasOwnProperty("outputConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.OutputConfig.verify(message.outputConfig);
+                                var error = $root.google.cloud.retail.v2alpha.OutputConfig.verify(message.outputConfig, long + 1);
                                 if (error)
                                     return "outputConfig." + error;
                             }
@@ -62055,16 +64731,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ExportAnalyticsMetricsRequest} ExportAnalyticsMetricsRequest
                          */
-                        ExportAnalyticsMetricsRequest.fromObject = function fromObject(object) {
+                        ExportAnalyticsMetricsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ExportAnalyticsMetricsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ExportAnalyticsMetricsRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
                             if (object.outputConfig != null) {
                                 if (typeof object.outputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportAnalyticsMetricsRequest.outputConfig: object expected");
-                                message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.fromObject(object.outputConfig);
+                                message.outputConfig = $root.google.cloud.retail.v2alpha.OutputConfig.fromObject(object.outputConfig, long + 1);
                             }
                             if (object.filter != null)
                                 message.filter = String(object.filter);
@@ -62148,7 +64828,7 @@
                         function ExportMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -62223,9 +64903,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportMetadata.decode = function decode(reader, length, error) {
+                        ExportMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ExportMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -62233,15 +64917,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -62272,16 +64956,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportMetadata.verify = function verify(message) {
+                        ExportMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -62296,19 +64984,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ExportMetadata} ExportMetadata
                          */
-                        ExportMetadata.fromObject = function fromObject(object) {
+                        ExportMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ExportMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ExportMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportMetadata.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             return message;
                         };
@@ -62389,7 +65081,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -62475,9 +65167,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportProductsResponse.decode = function decode(reader, length, error) {
+                        ExportProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ExportProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -62487,19 +65183,19 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.decode(reader, reader.uint32());
+                                        message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -62530,25 +65226,29 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportProductsResponse.verify = function verify(message) {
+                        ExportProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.outputResult != null && message.hasOwnProperty("outputResult")) {
-                                var error = $root.google.cloud.retail.v2alpha.OutputResult.verify(message.outputResult);
+                                var error = $root.google.cloud.retail.v2alpha.OutputResult.verify(message.outputResult, long + 1);
                                 if (error)
                                     return "outputResult." + error;
                             }
@@ -62563,9 +65263,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ExportProductsResponse} ExportProductsResponse
                          */
-                        ExportProductsResponse.fromObject = function fromObject(object) {
+                        ExportProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ExportProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ExportProductsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -62574,18 +65278,18 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ExportProductsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportProductsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.outputResult != null) {
                                 if (typeof object.outputResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportProductsResponse.outputResult: object expected");
-                                message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.fromObject(object.outputResult);
+                                message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.fromObject(object.outputResult, long + 1);
                             }
                             return message;
                         };
@@ -62673,7 +65377,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -62759,9 +65463,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportUserEventsResponse.decode = function decode(reader, length, error) {
+                        ExportUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ExportUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -62771,19 +65479,19 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.decode(reader, reader.uint32());
+                                        message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -62814,25 +65522,29 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportUserEventsResponse.verify = function verify(message) {
+                        ExportUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.outputResult != null && message.hasOwnProperty("outputResult")) {
-                                var error = $root.google.cloud.retail.v2alpha.OutputResult.verify(message.outputResult);
+                                var error = $root.google.cloud.retail.v2alpha.OutputResult.verify(message.outputResult, long + 1);
                                 if (error)
                                     return "outputResult." + error;
                             }
@@ -62847,9 +65559,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ExportUserEventsResponse} ExportUserEventsResponse
                          */
-                        ExportUserEventsResponse.fromObject = function fromObject(object) {
+                        ExportUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ExportUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ExportUserEventsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -62858,18 +65574,18 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ExportUserEventsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportUserEventsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.outputResult != null) {
                                 if (typeof object.outputResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportUserEventsResponse.outputResult: object expected");
-                                message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.fromObject(object.outputResult);
+                                message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.fromObject(object.outputResult, long + 1);
                             }
                             return message;
                         };
@@ -62957,7 +65673,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -63043,9 +65759,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportAnalyticsMetricsResponse.decode = function decode(reader, length, error) {
+                        ExportAnalyticsMetricsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ExportAnalyticsMetricsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -63055,19 +65775,19 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.decode(reader, reader.uint32());
+                                        message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -63098,25 +65818,29 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportAnalyticsMetricsResponse.verify = function verify(message) {
+                        ExportAnalyticsMetricsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.outputResult != null && message.hasOwnProperty("outputResult")) {
-                                var error = $root.google.cloud.retail.v2alpha.OutputResult.verify(message.outputResult);
+                                var error = $root.google.cloud.retail.v2alpha.OutputResult.verify(message.outputResult, long + 1);
                                 if (error)
                                     return "outputResult." + error;
                             }
@@ -63131,9 +65855,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ExportAnalyticsMetricsResponse} ExportAnalyticsMetricsResponse
                          */
-                        ExportAnalyticsMetricsResponse.fromObject = function fromObject(object) {
+                        ExportAnalyticsMetricsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ExportAnalyticsMetricsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ExportAnalyticsMetricsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -63142,18 +65870,18 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ExportAnalyticsMetricsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportAnalyticsMetricsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ExportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.outputResult != null) {
                                 if (typeof object.outputResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExportAnalyticsMetricsResponse.outputResult: object expected");
-                                message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.fromObject(object.outputResult);
+                                message.outputResult = $root.google.cloud.retail.v2alpha.OutputResult.fromObject(object.outputResult, long + 1);
                             }
                             return message;
                         };
@@ -63241,7 +65969,7 @@
                             this.gcsResult = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -63318,9 +66046,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        OutputResult.decode = function decode(reader, length, error) {
+                        OutputResult.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.OutputResult();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -63330,17 +66062,17 @@
                                 case 1: {
                                         if (!(message.bigqueryResult && message.bigqueryResult.length))
                                             message.bigqueryResult = [];
-                                        message.bigqueryResult.push($root.google.cloud.retail.v2alpha.BigQueryOutputResult.decode(reader, reader.uint32()));
+                                        message.bigqueryResult.push($root.google.cloud.retail.v2alpha.BigQueryOutputResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
                                         if (!(message.gcsResult && message.gcsResult.length))
                                             message.gcsResult = [];
-                                        message.gcsResult.push($root.google.cloud.retail.v2alpha.GcsOutputResult.decode(reader, reader.uint32()));
+                                        message.gcsResult.push($root.google.cloud.retail.v2alpha.GcsOutputResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -63371,14 +66103,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        OutputResult.verify = function verify(message) {
+                        OutputResult.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.bigqueryResult != null && message.hasOwnProperty("bigqueryResult")) {
                                 if (!Array.isArray(message.bigqueryResult))
                                     return "bigqueryResult: array expected";
                                 for (var i = 0; i < message.bigqueryResult.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.BigQueryOutputResult.verify(message.bigqueryResult[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.BigQueryOutputResult.verify(message.bigqueryResult[i], long + 1);
                                     if (error)
                                         return "bigqueryResult." + error;
                                 }
@@ -63387,7 +66123,7 @@
                                 if (!Array.isArray(message.gcsResult))
                                     return "gcsResult: array expected";
                                 for (var i = 0; i < message.gcsResult.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.GcsOutputResult.verify(message.gcsResult[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.GcsOutputResult.verify(message.gcsResult[i], long + 1);
                                     if (error)
                                         return "gcsResult." + error;
                                 }
@@ -63403,9 +66139,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.OutputResult} OutputResult
                          */
-                        OutputResult.fromObject = function fromObject(object) {
+                        OutputResult.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.OutputResult)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.OutputResult();
                             if (object.bigqueryResult) {
                                 if (!Array.isArray(object.bigqueryResult))
@@ -63414,7 +66154,7 @@
                                 for (var i = 0; i < object.bigqueryResult.length; ++i) {
                                     if (typeof object.bigqueryResult[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.OutputResult.bigqueryResult: object expected");
-                                    message.bigqueryResult[i] = $root.google.cloud.retail.v2alpha.BigQueryOutputResult.fromObject(object.bigqueryResult[i]);
+                                    message.bigqueryResult[i] = $root.google.cloud.retail.v2alpha.BigQueryOutputResult.fromObject(object.bigqueryResult[i], long + 1);
                                 }
                             }
                             if (object.gcsResult) {
@@ -63424,7 +66164,7 @@
                                 for (var i = 0; i < object.gcsResult.length; ++i) {
                                     if (typeof object.gcsResult[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.OutputResult.gcsResult: object expected");
-                                    message.gcsResult[i] = $root.google.cloud.retail.v2alpha.GcsOutputResult.fromObject(object.gcsResult[i]);
+                                    message.gcsResult[i] = $root.google.cloud.retail.v2alpha.GcsOutputResult.fromObject(object.gcsResult[i], long + 1);
                                 }
                             }
                             return message;
@@ -63510,7 +66250,7 @@
                         function BigQueryOutputResult(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -63585,9 +66325,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BigQueryOutputResult.decode = function decode(reader, length, error) {
+                        BigQueryOutputResult.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.BigQueryOutputResult();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -63603,7 +66347,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -63634,9 +66378,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BigQueryOutputResult.verify = function verify(message) {
+                        BigQueryOutputResult.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.datasetId != null && message.hasOwnProperty("datasetId"))
                                 if (!$util.isString(message.datasetId))
                                     return "datasetId: string expected";
@@ -63654,9 +66402,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.BigQueryOutputResult} BigQueryOutputResult
                          */
-                        BigQueryOutputResult.fromObject = function fromObject(object) {
+                        BigQueryOutputResult.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.BigQueryOutputResult)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.BigQueryOutputResult();
                             if (object.datasetId != null)
                                 message.datasetId = String(object.datasetId);
@@ -63738,7 +66490,7 @@
                         function GcsOutputResult(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -63803,9 +66555,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GcsOutputResult.decode = function decode(reader, length, error) {
+                        GcsOutputResult.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GcsOutputResult();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -63817,7 +66573,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -63848,9 +66604,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GcsOutputResult.verify = function verify(message) {
+                        GcsOutputResult.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.outputUri != null && message.hasOwnProperty("outputUri"))
                                 if (!$util.isString(message.outputUri))
                                     return "outputUri: string expected";
@@ -63865,9 +66625,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GcsOutputResult} GcsOutputResult
                          */
-                        GcsOutputResult.fromObject = function fromObject(object) {
+                        GcsOutputResult.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GcsOutputResult)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GcsOutputResult();
                             if (object.outputUri != null)
                                 message.outputUri = String(object.outputUri);
@@ -63966,7 +66730,7 @@
                             this.qualityMetrics = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -64083,9 +66847,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Branch.decode = function decode(reader, length, error) {
+                        Branch.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Branch();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -64105,23 +66873,23 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.lastProductImportTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.lastProductImportTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
                                         if (!(message.productCountStats && message.productCountStats.length))
                                             message.productCountStats = [];
-                                        message.productCountStats.push($root.google.cloud.retail.v2alpha.Branch.ProductCountStatistic.decode(reader, reader.uint32()));
+                                        message.productCountStats.push($root.google.cloud.retail.v2alpha.Branch.ProductCountStatistic.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 6: {
                                         if (!(message.qualityMetrics && message.qualityMetrics.length))
                                             message.qualityMetrics = [];
-                                        message.qualityMetrics.push($root.google.cloud.retail.v2alpha.Branch.QualityMetric.decode(reader, reader.uint32()));
+                                        message.qualityMetrics.push($root.google.cloud.retail.v2alpha.Branch.QualityMetric.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -64152,9 +66920,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Branch.verify = function verify(message) {
+                        Branch.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -64165,7 +66937,7 @@
                                 if (typeof message.isDefault !== "boolean")
                                     return "isDefault: boolean expected";
                             if (message.lastProductImportTime != null && message.hasOwnProperty("lastProductImportTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.lastProductImportTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.lastProductImportTime, long + 1);
                                 if (error)
                                     return "lastProductImportTime." + error;
                             }
@@ -64173,7 +66945,7 @@
                                 if (!Array.isArray(message.productCountStats))
                                     return "productCountStats: array expected";
                                 for (var i = 0; i < message.productCountStats.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Branch.ProductCountStatistic.verify(message.productCountStats[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Branch.ProductCountStatistic.verify(message.productCountStats[i], long + 1);
                                     if (error)
                                         return "productCountStats." + error;
                                 }
@@ -64182,7 +66954,7 @@
                                 if (!Array.isArray(message.qualityMetrics))
                                     return "qualityMetrics: array expected";
                                 for (var i = 0; i < message.qualityMetrics.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Branch.QualityMetric.verify(message.qualityMetrics[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Branch.QualityMetric.verify(message.qualityMetrics[i], long + 1);
                                     if (error)
                                         return "qualityMetrics." + error;
                                 }
@@ -64198,9 +66970,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Branch} Branch
                          */
-                        Branch.fromObject = function fromObject(object) {
+                        Branch.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Branch)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Branch();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -64211,7 +66987,7 @@
                             if (object.lastProductImportTime != null) {
                                 if (typeof object.lastProductImportTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Branch.lastProductImportTime: object expected");
-                                message.lastProductImportTime = $root.google.protobuf.Timestamp.fromObject(object.lastProductImportTime);
+                                message.lastProductImportTime = $root.google.protobuf.Timestamp.fromObject(object.lastProductImportTime, long + 1);
                             }
                             if (object.productCountStats) {
                                 if (!Array.isArray(object.productCountStats))
@@ -64220,7 +66996,7 @@
                                 for (var i = 0; i < object.productCountStats.length; ++i) {
                                     if (typeof object.productCountStats[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Branch.productCountStats: object expected");
-                                    message.productCountStats[i] = $root.google.cloud.retail.v2alpha.Branch.ProductCountStatistic.fromObject(object.productCountStats[i]);
+                                    message.productCountStats[i] = $root.google.cloud.retail.v2alpha.Branch.ProductCountStatistic.fromObject(object.productCountStats[i], long + 1);
                                 }
                             }
                             if (object.qualityMetrics) {
@@ -64230,7 +67006,7 @@
                                 for (var i = 0; i < object.qualityMetrics.length; ++i) {
                                     if (typeof object.qualityMetrics[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Branch.qualityMetrics: object expected");
-                                    message.qualityMetrics[i] = $root.google.cloud.retail.v2alpha.Branch.QualityMetric.fromObject(object.qualityMetrics[i]);
+                                    message.qualityMetrics[i] = $root.google.cloud.retail.v2alpha.Branch.QualityMetric.fromObject(object.qualityMetrics[i], long + 1);
                                 }
                             }
                             return message;
@@ -64328,7 +67104,7 @@
                                 this.counts = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -64404,9 +67180,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ProductCountStatistic.decode = function decode(reader, length, error) {
+                            ProductCountStatistic.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Branch.ProductCountStatistic(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -64433,15 +67213,17 @@
                                                     value = reader.int64();
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.counts, key);
                                             message.counts[key] = value;
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -64472,9 +67254,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ProductCountStatistic.verify = function verify(message) {
+                            ProductCountStatistic.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.scope != null && message.hasOwnProperty("scope"))
                                     switch (message.scope) {
                                     default:
@@ -64503,9 +67289,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Branch.ProductCountStatistic} ProductCountStatistic
                              */
-                            ProductCountStatistic.fromObject = function fromObject(object) {
+                            ProductCountStatistic.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Branch.ProductCountStatistic)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Branch.ProductCountStatistic();
                                 switch (object.scope) {
                                 default:
@@ -64531,7 +67321,9 @@
                                     if (typeof object.counts !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Branch.ProductCountStatistic.counts: object expected");
                                     message.counts = {};
-                                    for (var keys = Object.keys(object.counts), i = 0; i < keys.length; ++i)
+                                    for (var keys = Object.keys(object.counts), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.counts, keys[i]);
                                         if ($util.Long)
                                             (message.counts[keys[i]] = $util.Long.fromValue(object.counts[keys[i]])).unsigned = false;
                                         else if (typeof object.counts[keys[i]] === "string")
@@ -64540,6 +67332,7 @@
                                             message.counts[keys[i]] = object.counts[keys[i]];
                                         else if (typeof object.counts[keys[i]] === "object")
                                             message.counts[keys[i]] = new $util.LongBits(object.counts[keys[i]].low >>> 0, object.counts[keys[i]].high >>> 0).toNumber();
+                                    }
                                 }
                                 return message;
                             };
@@ -64566,11 +67359,14 @@
                                 var keys2;
                                 if (message.counts && (keys2 = Object.keys(message.counts)).length) {
                                     object.counts = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.counts, keys2[j]);
                                         if (typeof message.counts[keys2[j]] === "number")
                                             object.counts[keys2[j]] = options.longs === String ? String(message.counts[keys2[j]]) : message.counts[keys2[j]];
                                         else
                                             object.counts[keys2[j]] = options.longs === String ? $util.Long.prototype.toString.call(message.counts[keys2[j]]) : options.longs === Number ? new $util.LongBits(message.counts[keys2[j]].low >>> 0, message.counts[keys2[j]].high >>> 0).toNumber() : message.counts[keys2[j]];
+                                    }
                                 }
                                 return object;
                             };
@@ -64645,7 +67441,7 @@
                                 this.unqualifiedSampleProducts = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -64751,9 +67547,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            QualityMetric.decode = function decode(reader, length, error) {
+                            QualityMetric.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Branch.QualityMetric();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -64779,11 +67579,11 @@
                                     case 5: {
                                             if (!(message.unqualifiedSampleProducts && message.unqualifiedSampleProducts.length))
                                                 message.unqualifiedSampleProducts = [];
-                                            message.unqualifiedSampleProducts.push($root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32()));
+                                            message.unqualifiedSampleProducts.push($root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -64814,9 +67614,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            QualityMetric.verify = function verify(message) {
+                            QualityMetric.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.requirementKey != null && message.hasOwnProperty("requirementKey"))
                                     if (!$util.isString(message.requirementKey))
                                         return "requirementKey: string expected";
@@ -64833,7 +67637,7 @@
                                     if (!Array.isArray(message.unqualifiedSampleProducts))
                                         return "unqualifiedSampleProducts: array expected";
                                     for (var i = 0; i < message.unqualifiedSampleProducts.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.Product.verify(message.unqualifiedSampleProducts[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.Product.verify(message.unqualifiedSampleProducts[i], long + 1);
                                         if (error)
                                             return "unqualifiedSampleProducts." + error;
                                     }
@@ -64849,9 +67653,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Branch.QualityMetric} QualityMetric
                              */
-                            QualityMetric.fromObject = function fromObject(object) {
+                            QualityMetric.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Branch.QualityMetric)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Branch.QualityMetric();
                                 if (object.requirementKey != null)
                                     message.requirementKey = String(object.requirementKey);
@@ -64868,7 +67676,7 @@
                                     for (var i = 0; i < object.unqualifiedSampleProducts.length; ++i) {
                                         if (typeof object.unqualifiedSampleProducts[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.Branch.QualityMetric.unqualifiedSampleProducts: object expected");
-                                        message.unqualifiedSampleProducts[i] = $root.google.cloud.retail.v2alpha.Product.fromObject(object.unqualifiedSampleProducts[i]);
+                                        message.unqualifiedSampleProducts[i] = $root.google.cloud.retail.v2alpha.Product.fromObject(object.unqualifiedSampleProducts[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -65010,7 +67818,7 @@
                             this.localInventories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -65435,9 +68243,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Product.decode = function decode(reader, length, error) {
+                        Product.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Product(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -65445,11 +68257,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 16: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 17: {
-                                        message.ttl = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.ttl = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
@@ -65515,13 +68327,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2alpha.CustomAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2alpha.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributes, key);
                                         message.attributes[key] = value;
                                         break;
                                     }
@@ -65532,15 +68346,15 @@
                                         break;
                                     }
                                 case 14: {
-                                        message.priceInfo = $root.google.cloud.retail.v2alpha.PriceInfo.decode(reader, reader.uint32());
+                                        message.priceInfo = $root.google.cloud.retail.v2alpha.PriceInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 15: {
-                                        message.rating = $root.google.cloud.retail.v2alpha.Rating.decode(reader, reader.uint32());
+                                        message.rating = $root.google.cloud.retail.v2alpha.Rating.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 18: {
-                                        message.availableTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.availableTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
@@ -65548,13 +68362,13 @@
                                         break;
                                     }
                                 case 20: {
-                                        message.availableQuantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32());
+                                        message.availableQuantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 21: {
                                         if (!(message.fulfillmentInfo && message.fulfillmentInfo.length))
                                             message.fulfillmentInfo = [];
-                                        message.fulfillmentInfo.push($root.google.cloud.retail.v2alpha.FulfillmentInfo.decode(reader, reader.uint32()));
+                                        message.fulfillmentInfo.push($root.google.cloud.retail.v2alpha.FulfillmentInfo.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 22: {
@@ -65564,15 +68378,15 @@
                                 case 23: {
                                         if (!(message.images && message.images.length))
                                             message.images = [];
-                                        message.images.push($root.google.cloud.retail.v2alpha.Image.decode(reader, reader.uint32()));
+                                        message.images.push($root.google.cloud.retail.v2alpha.Image.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 24: {
-                                        message.audience = $root.google.cloud.retail.v2alpha.Audience.decode(reader, reader.uint32());
+                                        message.audience = $root.google.cloud.retail.v2alpha.Audience.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 25: {
-                                        message.colorInfo = $root.google.cloud.retail.v2alpha.ColorInfo.decode(reader, reader.uint32());
+                                        message.colorInfo = $root.google.cloud.retail.v2alpha.ColorInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 26: {
@@ -65602,31 +68416,31 @@
                                 case 34: {
                                         if (!(message.promotions && message.promotions.length))
                                             message.promotions = [];
-                                        message.promotions.push($root.google.cloud.retail.v2alpha.Promotion.decode(reader, reader.uint32()));
+                                        message.promotions.push($root.google.cloud.retail.v2alpha.Promotion.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 33: {
-                                        message.publishTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.publishTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 30: {
-                                        message.retrievableFields = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.retrievableFields = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 31: {
                                         if (!(message.variants && message.variants.length))
                                             message.variants = [];
-                                        message.variants.push($root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32()));
+                                        message.variants.push($root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 35: {
                                         if (!(message.localInventories && message.localInventories.length))
                                             message.localInventories = [];
-                                        message.localInventories.push($root.google.cloud.retail.v2alpha.LocalInventory.decode(reader, reader.uint32()));
+                                        message.localInventories.push($root.google.cloud.retail.v2alpha.LocalInventory.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -65657,14 +68471,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Product.verify = function verify(message) {
+                        Product.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
                                 properties.expiration = 1;
                                 {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                     if (error)
                                         return "expireTime." + error;
                                 }
@@ -65674,7 +68492,7 @@
                                     return "expiration: multiple values";
                                 properties.expiration = 1;
                                 {
-                                    var error = $root.google.protobuf.Duration.verify(message.ttl);
+                                    var error = $root.google.protobuf.Duration.verify(message.ttl, long + 1);
                                     if (error)
                                         return "ttl." + error;
                                 }
@@ -65736,7 +68554,7 @@
                                     return "attributes: object expected";
                                 var key = Object.keys(message.attributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.CustomAttribute.verify(message.attributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2alpha.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                     if (error)
                                         return "attributes." + error;
                                 }
@@ -65749,17 +68567,17 @@
                                         return "tags: string[] expected";
                             }
                             if (message.priceInfo != null && message.hasOwnProperty("priceInfo")) {
-                                var error = $root.google.cloud.retail.v2alpha.PriceInfo.verify(message.priceInfo);
+                                var error = $root.google.cloud.retail.v2alpha.PriceInfo.verify(message.priceInfo, long + 1);
                                 if (error)
                                     return "priceInfo." + error;
                             }
                             if (message.rating != null && message.hasOwnProperty("rating")) {
-                                var error = $root.google.cloud.retail.v2alpha.Rating.verify(message.rating);
+                                var error = $root.google.cloud.retail.v2alpha.Rating.verify(message.rating, long + 1);
                                 if (error)
                                     return "rating." + error;
                             }
                             if (message.availableTime != null && message.hasOwnProperty("availableTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.availableTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.availableTime, long + 1);
                                 if (error)
                                     return "availableTime." + error;
                             }
@@ -65775,7 +68593,7 @@
                                     break;
                                 }
                             if (message.availableQuantity != null && message.hasOwnProperty("availableQuantity")) {
-                                var error = $root.google.protobuf.Int32Value.verify(message.availableQuantity);
+                                var error = $root.google.protobuf.Int32Value.verify(message.availableQuantity, long + 1);
                                 if (error)
                                     return "availableQuantity." + error;
                             }
@@ -65783,7 +68601,7 @@
                                 if (!Array.isArray(message.fulfillmentInfo))
                                     return "fulfillmentInfo: array expected";
                                 for (var i = 0; i < message.fulfillmentInfo.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.FulfillmentInfo.verify(message.fulfillmentInfo[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.FulfillmentInfo.verify(message.fulfillmentInfo[i], long + 1);
                                     if (error)
                                         return "fulfillmentInfo." + error;
                                 }
@@ -65795,18 +68613,18 @@
                                 if (!Array.isArray(message.images))
                                     return "images: array expected";
                                 for (var i = 0; i < message.images.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Image.verify(message.images[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Image.verify(message.images[i], long + 1);
                                     if (error)
                                         return "images." + error;
                                 }
                             }
                             if (message.audience != null && message.hasOwnProperty("audience")) {
-                                var error = $root.google.cloud.retail.v2alpha.Audience.verify(message.audience);
+                                var error = $root.google.cloud.retail.v2alpha.Audience.verify(message.audience, long + 1);
                                 if (error)
                                     return "audience." + error;
                             }
                             if (message.colorInfo != null && message.hasOwnProperty("colorInfo")) {
-                                var error = $root.google.cloud.retail.v2alpha.ColorInfo.verify(message.colorInfo);
+                                var error = $root.google.cloud.retail.v2alpha.ColorInfo.verify(message.colorInfo, long + 1);
                                 if (error)
                                     return "colorInfo." + error;
                             }
@@ -65842,18 +68660,18 @@
                                 if (!Array.isArray(message.promotions))
                                     return "promotions: array expected";
                                 for (var i = 0; i < message.promotions.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Promotion.verify(message.promotions[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Promotion.verify(message.promotions[i], long + 1);
                                     if (error)
                                         return "promotions." + error;
                                 }
                             }
                             if (message.publishTime != null && message.hasOwnProperty("publishTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.publishTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.publishTime, long + 1);
                                 if (error)
                                     return "publishTime." + error;
                             }
                             if (message.retrievableFields != null && message.hasOwnProperty("retrievableFields")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.retrievableFields);
+                                var error = $root.google.protobuf.FieldMask.verify(message.retrievableFields, long + 1);
                                 if (error)
                                     return "retrievableFields." + error;
                             }
@@ -65861,7 +68679,7 @@
                                 if (!Array.isArray(message.variants))
                                     return "variants: array expected";
                                 for (var i = 0; i < message.variants.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Product.verify(message.variants[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Product.verify(message.variants[i], long + 1);
                                     if (error)
                                         return "variants." + error;
                                 }
@@ -65870,7 +68688,7 @@
                                 if (!Array.isArray(message.localInventories))
                                     return "localInventories: array expected";
                                 for (var i = 0; i < message.localInventories.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.LocalInventory.verify(message.localInventories[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.LocalInventory.verify(message.localInventories[i], long + 1);
                                     if (error)
                                         return "localInventories." + error;
                                 }
@@ -65886,19 +68704,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Product} Product
                          */
-                        Product.fromObject = function fromObject(object) {
+                        Product.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Product)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Product();
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             if (object.ttl != null) {
                                 if (typeof object.ttl !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.ttl: object expected");
-                                message.ttl = $root.google.protobuf.Duration.fromObject(object.ttl);
+                                message.ttl = $root.google.protobuf.Duration.fromObject(object.ttl, long + 1);
                             }
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -65964,9 +68786,11 @@
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.attributes: object expected");
                                 message.attributes = {};
                                 for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributes, keys[i]);
                                     if (typeof object.attributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Product.attributes: object expected");
-                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2alpha.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2alpha.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                 }
                             }
                             if (object.tags) {
@@ -65979,17 +68803,17 @@
                             if (object.priceInfo != null) {
                                 if (typeof object.priceInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.priceInfo: object expected");
-                                message.priceInfo = $root.google.cloud.retail.v2alpha.PriceInfo.fromObject(object.priceInfo);
+                                message.priceInfo = $root.google.cloud.retail.v2alpha.PriceInfo.fromObject(object.priceInfo, long + 1);
                             }
                             if (object.rating != null) {
                                 if (typeof object.rating !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.rating: object expected");
-                                message.rating = $root.google.cloud.retail.v2alpha.Rating.fromObject(object.rating);
+                                message.rating = $root.google.cloud.retail.v2alpha.Rating.fromObject(object.rating, long + 1);
                             }
                             if (object.availableTime != null) {
                                 if (typeof object.availableTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.availableTime: object expected");
-                                message.availableTime = $root.google.protobuf.Timestamp.fromObject(object.availableTime);
+                                message.availableTime = $root.google.protobuf.Timestamp.fromObject(object.availableTime, long + 1);
                             }
                             switch (object.availability) {
                             default:
@@ -66022,7 +68846,7 @@
                             if (object.availableQuantity != null) {
                                 if (typeof object.availableQuantity !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.availableQuantity: object expected");
-                                message.availableQuantity = $root.google.protobuf.Int32Value.fromObject(object.availableQuantity);
+                                message.availableQuantity = $root.google.protobuf.Int32Value.fromObject(object.availableQuantity, long + 1);
                             }
                             if (object.fulfillmentInfo) {
                                 if (!Array.isArray(object.fulfillmentInfo))
@@ -66031,7 +68855,7 @@
                                 for (var i = 0; i < object.fulfillmentInfo.length; ++i) {
                                     if (typeof object.fulfillmentInfo[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Product.fulfillmentInfo: object expected");
-                                    message.fulfillmentInfo[i] = $root.google.cloud.retail.v2alpha.FulfillmentInfo.fromObject(object.fulfillmentInfo[i]);
+                                    message.fulfillmentInfo[i] = $root.google.cloud.retail.v2alpha.FulfillmentInfo.fromObject(object.fulfillmentInfo[i], long + 1);
                                 }
                             }
                             if (object.uri != null)
@@ -66043,18 +68867,18 @@
                                 for (var i = 0; i < object.images.length; ++i) {
                                     if (typeof object.images[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Product.images: object expected");
-                                    message.images[i] = $root.google.cloud.retail.v2alpha.Image.fromObject(object.images[i]);
+                                    message.images[i] = $root.google.cloud.retail.v2alpha.Image.fromObject(object.images[i], long + 1);
                                 }
                             }
                             if (object.audience != null) {
                                 if (typeof object.audience !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.audience: object expected");
-                                message.audience = $root.google.cloud.retail.v2alpha.Audience.fromObject(object.audience);
+                                message.audience = $root.google.cloud.retail.v2alpha.Audience.fromObject(object.audience, long + 1);
                             }
                             if (object.colorInfo != null) {
                                 if (typeof object.colorInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.colorInfo: object expected");
-                                message.colorInfo = $root.google.cloud.retail.v2alpha.ColorInfo.fromObject(object.colorInfo);
+                                message.colorInfo = $root.google.cloud.retail.v2alpha.ColorInfo.fromObject(object.colorInfo, long + 1);
                             }
                             if (object.sizes) {
                                 if (!Array.isArray(object.sizes))
@@ -66091,18 +68915,18 @@
                                 for (var i = 0; i < object.promotions.length; ++i) {
                                     if (typeof object.promotions[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Product.promotions: object expected");
-                                    message.promotions[i] = $root.google.cloud.retail.v2alpha.Promotion.fromObject(object.promotions[i]);
+                                    message.promotions[i] = $root.google.cloud.retail.v2alpha.Promotion.fromObject(object.promotions[i], long + 1);
                                 }
                             }
                             if (object.publishTime != null) {
                                 if (typeof object.publishTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.publishTime: object expected");
-                                message.publishTime = $root.google.protobuf.Timestamp.fromObject(object.publishTime);
+                                message.publishTime = $root.google.protobuf.Timestamp.fromObject(object.publishTime, long + 1);
                             }
                             if (object.retrievableFields != null) {
                                 if (typeof object.retrievableFields !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Product.retrievableFields: object expected");
-                                message.retrievableFields = $root.google.protobuf.FieldMask.fromObject(object.retrievableFields);
+                                message.retrievableFields = $root.google.protobuf.FieldMask.fromObject(object.retrievableFields, long + 1);
                             }
                             if (object.variants) {
                                 if (!Array.isArray(object.variants))
@@ -66111,7 +68935,7 @@
                                 for (var i = 0; i < object.variants.length; ++i) {
                                     if (typeof object.variants[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Product.variants: object expected");
-                                    message.variants[i] = $root.google.cloud.retail.v2alpha.Product.fromObject(object.variants[i]);
+                                    message.variants[i] = $root.google.cloud.retail.v2alpha.Product.fromObject(object.variants[i], long + 1);
                                 }
                             }
                             if (object.localInventories) {
@@ -66121,7 +68945,7 @@
                                 for (var i = 0; i < object.localInventories.length; ++i) {
                                     if (typeof object.localInventories[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Product.localInventories: object expected");
-                                    message.localInventories[i] = $root.google.cloud.retail.v2alpha.LocalInventory.fromObject(object.localInventories[i]);
+                                    message.localInventories[i] = $root.google.cloud.retail.v2alpha.LocalInventory.fromObject(object.localInventories[i], long + 1);
                                 }
                             }
                             return message;
@@ -66211,8 +69035,11 @@
                             var keys2;
                             if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                 object.attributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributes, keys2[j]);
                                     object.attributes[keys2[j]] = $root.google.cloud.retail.v2alpha.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                }
                             }
                             if (message.tags && message.tags.length) {
                                 object.tags = [];
@@ -66453,7 +69280,7 @@
                             this.pageCategories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -66541,9 +69368,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Condition.decode = function decode(reader, length, error) {
+                        Condition.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Condition();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -66553,13 +69384,13 @@
                                 case 1: {
                                         if (!(message.queryTerms && message.queryTerms.length))
                                             message.queryTerms = [];
-                                        message.queryTerms.push($root.google.cloud.retail.v2alpha.Condition.QueryTerm.decode(reader, reader.uint32()));
+                                        message.queryTerms.push($root.google.cloud.retail.v2alpha.Condition.QueryTerm.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 3: {
                                         if (!(message.activeTimeRange && message.activeTimeRange.length))
                                             message.activeTimeRange = [];
-                                        message.activeTimeRange.push($root.google.cloud.retail.v2alpha.Condition.TimeRange.decode(reader, reader.uint32()));
+                                        message.activeTimeRange.push($root.google.cloud.retail.v2alpha.Condition.TimeRange.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 4: {
@@ -66569,7 +69400,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -66600,14 +69431,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Condition.verify = function verify(message) {
+                        Condition.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                 if (!Array.isArray(message.queryTerms))
                                     return "queryTerms: array expected";
                                 for (var i = 0; i < message.queryTerms.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Condition.QueryTerm.verify(message.queryTerms[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Condition.QueryTerm.verify(message.queryTerms[i], long + 1);
                                     if (error)
                                         return "queryTerms." + error;
                                 }
@@ -66616,7 +69451,7 @@
                                 if (!Array.isArray(message.activeTimeRange))
                                     return "activeTimeRange: array expected";
                                 for (var i = 0; i < message.activeTimeRange.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Condition.TimeRange.verify(message.activeTimeRange[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Condition.TimeRange.verify(message.activeTimeRange[i], long + 1);
                                     if (error)
                                         return "activeTimeRange." + error;
                                 }
@@ -66639,9 +69474,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Condition} Condition
                          */
-                        Condition.fromObject = function fromObject(object) {
+                        Condition.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Condition)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Condition();
                             if (object.queryTerms) {
                                 if (!Array.isArray(object.queryTerms))
@@ -66650,7 +69489,7 @@
                                 for (var i = 0; i < object.queryTerms.length; ++i) {
                                     if (typeof object.queryTerms[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Condition.queryTerms: object expected");
-                                    message.queryTerms[i] = $root.google.cloud.retail.v2alpha.Condition.QueryTerm.fromObject(object.queryTerms[i]);
+                                    message.queryTerms[i] = $root.google.cloud.retail.v2alpha.Condition.QueryTerm.fromObject(object.queryTerms[i], long + 1);
                                 }
                             }
                             if (object.activeTimeRange) {
@@ -66660,7 +69499,7 @@
                                 for (var i = 0; i < object.activeTimeRange.length; ++i) {
                                     if (typeof object.activeTimeRange[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Condition.activeTimeRange: object expected");
-                                    message.activeTimeRange[i] = $root.google.cloud.retail.v2alpha.Condition.TimeRange.fromObject(object.activeTimeRange[i]);
+                                    message.activeTimeRange[i] = $root.google.cloud.retail.v2alpha.Condition.TimeRange.fromObject(object.activeTimeRange[i], long + 1);
                                 }
                             }
                             if (object.pageCategories) {
@@ -66756,7 +69595,7 @@
                             function QueryTerm(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -66831,9 +69670,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            QueryTerm.decode = function decode(reader, length, error) {
+                            QueryTerm.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Condition.QueryTerm();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -66849,7 +69692,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -66880,9 +69723,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            QueryTerm.verify = function verify(message) {
+                            QueryTerm.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.value != null && message.hasOwnProperty("value"))
                                     if (!$util.isString(message.value))
                                         return "value: string expected";
@@ -66900,9 +69747,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Condition.QueryTerm} QueryTerm
                              */
-                            QueryTerm.fromObject = function fromObject(object) {
+                            QueryTerm.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Condition.QueryTerm)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Condition.QueryTerm();
                                 if (object.value != null)
                                     message.value = String(object.value);
@@ -66985,7 +69836,7 @@
                             function TimeRange(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -67060,9 +69911,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TimeRange.decode = function decode(reader, length, error) {
+                            TimeRange.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Condition.TimeRange();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -67070,15 +69925,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -67109,16 +69964,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TimeRange.verify = function verify(message) {
+                            TimeRange.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                     if (error)
                                         return "startTime." + error;
                                 }
                                 if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                     if (error)
                                         return "endTime." + error;
                                 }
@@ -67133,19 +69992,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Condition.TimeRange} TimeRange
                              */
-                            TimeRange.fromObject = function fromObject(object) {
+                            TimeRange.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Condition.TimeRange)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Condition.TimeRange();
                                 if (object.startTime != null) {
                                     if (typeof object.startTime !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Condition.TimeRange.startTime: object expected");
-                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                                 }
                                 if (object.endTime != null) {
                                     if (typeof object.endTime !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Condition.TimeRange.endTime: object expected");
-                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                                 }
                                 return message;
                             };
@@ -67237,7 +70100,7 @@
                         function Rule(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -67426,9 +70289,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Rule.decode = function decode(reader, length, error) {
+                        Rule.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -67436,55 +70303,55 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.boostAction = $root.google.cloud.retail.v2alpha.Rule.BoostAction.decode(reader, reader.uint32());
+                                        message.boostAction = $root.google.cloud.retail.v2alpha.Rule.BoostAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.redirectAction = $root.google.cloud.retail.v2alpha.Rule.RedirectAction.decode(reader, reader.uint32());
+                                        message.redirectAction = $root.google.cloud.retail.v2alpha.Rule.RedirectAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.onewaySynonymsAction = $root.google.cloud.retail.v2alpha.Rule.OnewaySynonymsAction.decode(reader, reader.uint32());
+                                        message.onewaySynonymsAction = $root.google.cloud.retail.v2alpha.Rule.OnewaySynonymsAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.doNotAssociateAction = $root.google.cloud.retail.v2alpha.Rule.DoNotAssociateAction.decode(reader, reader.uint32());
+                                        message.doNotAssociateAction = $root.google.cloud.retail.v2alpha.Rule.DoNotAssociateAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.replacementAction = $root.google.cloud.retail.v2alpha.Rule.ReplacementAction.decode(reader, reader.uint32());
+                                        message.replacementAction = $root.google.cloud.retail.v2alpha.Rule.ReplacementAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
-                                        message.ignoreAction = $root.google.cloud.retail.v2alpha.Rule.IgnoreAction.decode(reader, reader.uint32());
+                                        message.ignoreAction = $root.google.cloud.retail.v2alpha.Rule.IgnoreAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
-                                        message.filterAction = $root.google.cloud.retail.v2alpha.Rule.FilterAction.decode(reader, reader.uint32());
+                                        message.filterAction = $root.google.cloud.retail.v2alpha.Rule.FilterAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 11: {
-                                        message.twowaySynonymsAction = $root.google.cloud.retail.v2alpha.Rule.TwowaySynonymsAction.decode(reader, reader.uint32());
+                                        message.twowaySynonymsAction = $root.google.cloud.retail.v2alpha.Rule.TwowaySynonymsAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 12: {
-                                        message.forceReturnFacetAction = $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.decode(reader, reader.uint32());
+                                        message.forceReturnFacetAction = $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
-                                        message.removeFacetAction = $root.google.cloud.retail.v2alpha.Rule.RemoveFacetAction.decode(reader, reader.uint32());
+                                        message.removeFacetAction = $root.google.cloud.retail.v2alpha.Rule.RemoveFacetAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
-                                        message.pinAction = $root.google.cloud.retail.v2alpha.Rule.PinAction.decode(reader, reader.uint32());
+                                        message.pinAction = $root.google.cloud.retail.v2alpha.Rule.PinAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
-                                        message.condition = $root.google.cloud.retail.v2alpha.Condition.decode(reader, reader.uint32());
+                                        message.condition = $root.google.cloud.retail.v2alpha.Condition.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -67515,14 +70382,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Rule.verify = function verify(message) {
+                        Rule.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.boostAction != null && message.hasOwnProperty("boostAction")) {
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.BoostAction.verify(message.boostAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.BoostAction.verify(message.boostAction, long + 1);
                                     if (error)
                                         return "boostAction." + error;
                                 }
@@ -67532,7 +70403,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.RedirectAction.verify(message.redirectAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.RedirectAction.verify(message.redirectAction, long + 1);
                                     if (error)
                                         return "redirectAction." + error;
                                 }
@@ -67542,7 +70413,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.OnewaySynonymsAction.verify(message.onewaySynonymsAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.OnewaySynonymsAction.verify(message.onewaySynonymsAction, long + 1);
                                     if (error)
                                         return "onewaySynonymsAction." + error;
                                 }
@@ -67552,7 +70423,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.DoNotAssociateAction.verify(message.doNotAssociateAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.DoNotAssociateAction.verify(message.doNotAssociateAction, long + 1);
                                     if (error)
                                         return "doNotAssociateAction." + error;
                                 }
@@ -67562,7 +70433,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.ReplacementAction.verify(message.replacementAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.ReplacementAction.verify(message.replacementAction, long + 1);
                                     if (error)
                                         return "replacementAction." + error;
                                 }
@@ -67572,7 +70443,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.IgnoreAction.verify(message.ignoreAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.IgnoreAction.verify(message.ignoreAction, long + 1);
                                     if (error)
                                         return "ignoreAction." + error;
                                 }
@@ -67582,7 +70453,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.FilterAction.verify(message.filterAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.FilterAction.verify(message.filterAction, long + 1);
                                     if (error)
                                         return "filterAction." + error;
                                 }
@@ -67592,7 +70463,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.TwowaySynonymsAction.verify(message.twowaySynonymsAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.TwowaySynonymsAction.verify(message.twowaySynonymsAction, long + 1);
                                     if (error)
                                         return "twowaySynonymsAction." + error;
                                 }
@@ -67602,7 +70473,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.verify(message.forceReturnFacetAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.verify(message.forceReturnFacetAction, long + 1);
                                     if (error)
                                         return "forceReturnFacetAction." + error;
                                 }
@@ -67612,7 +70483,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.RemoveFacetAction.verify(message.removeFacetAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.RemoveFacetAction.verify(message.removeFacetAction, long + 1);
                                     if (error)
                                         return "removeFacetAction." + error;
                                 }
@@ -67622,13 +70493,13 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.PinAction.verify(message.pinAction);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.PinAction.verify(message.pinAction, long + 1);
                                     if (error)
                                         return "pinAction." + error;
                                 }
                             }
                             if (message.condition != null && message.hasOwnProperty("condition")) {
-                                var error = $root.google.cloud.retail.v2alpha.Condition.verify(message.condition);
+                                var error = $root.google.cloud.retail.v2alpha.Condition.verify(message.condition, long + 1);
                                 if (error)
                                     return "condition." + error;
                             }
@@ -67643,69 +70514,73 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Rule} Rule
                          */
-                        Rule.fromObject = function fromObject(object) {
+                        Rule.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Rule)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Rule();
                             if (object.boostAction != null) {
                                 if (typeof object.boostAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.boostAction: object expected");
-                                message.boostAction = $root.google.cloud.retail.v2alpha.Rule.BoostAction.fromObject(object.boostAction);
+                                message.boostAction = $root.google.cloud.retail.v2alpha.Rule.BoostAction.fromObject(object.boostAction, long + 1);
                             }
                             if (object.redirectAction != null) {
                                 if (typeof object.redirectAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.redirectAction: object expected");
-                                message.redirectAction = $root.google.cloud.retail.v2alpha.Rule.RedirectAction.fromObject(object.redirectAction);
+                                message.redirectAction = $root.google.cloud.retail.v2alpha.Rule.RedirectAction.fromObject(object.redirectAction, long + 1);
                             }
                             if (object.onewaySynonymsAction != null) {
                                 if (typeof object.onewaySynonymsAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.onewaySynonymsAction: object expected");
-                                message.onewaySynonymsAction = $root.google.cloud.retail.v2alpha.Rule.OnewaySynonymsAction.fromObject(object.onewaySynonymsAction);
+                                message.onewaySynonymsAction = $root.google.cloud.retail.v2alpha.Rule.OnewaySynonymsAction.fromObject(object.onewaySynonymsAction, long + 1);
                             }
                             if (object.doNotAssociateAction != null) {
                                 if (typeof object.doNotAssociateAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.doNotAssociateAction: object expected");
-                                message.doNotAssociateAction = $root.google.cloud.retail.v2alpha.Rule.DoNotAssociateAction.fromObject(object.doNotAssociateAction);
+                                message.doNotAssociateAction = $root.google.cloud.retail.v2alpha.Rule.DoNotAssociateAction.fromObject(object.doNotAssociateAction, long + 1);
                             }
                             if (object.replacementAction != null) {
                                 if (typeof object.replacementAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.replacementAction: object expected");
-                                message.replacementAction = $root.google.cloud.retail.v2alpha.Rule.ReplacementAction.fromObject(object.replacementAction);
+                                message.replacementAction = $root.google.cloud.retail.v2alpha.Rule.ReplacementAction.fromObject(object.replacementAction, long + 1);
                             }
                             if (object.ignoreAction != null) {
                                 if (typeof object.ignoreAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.ignoreAction: object expected");
-                                message.ignoreAction = $root.google.cloud.retail.v2alpha.Rule.IgnoreAction.fromObject(object.ignoreAction);
+                                message.ignoreAction = $root.google.cloud.retail.v2alpha.Rule.IgnoreAction.fromObject(object.ignoreAction, long + 1);
                             }
                             if (object.filterAction != null) {
                                 if (typeof object.filterAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.filterAction: object expected");
-                                message.filterAction = $root.google.cloud.retail.v2alpha.Rule.FilterAction.fromObject(object.filterAction);
+                                message.filterAction = $root.google.cloud.retail.v2alpha.Rule.FilterAction.fromObject(object.filterAction, long + 1);
                             }
                             if (object.twowaySynonymsAction != null) {
                                 if (typeof object.twowaySynonymsAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.twowaySynonymsAction: object expected");
-                                message.twowaySynonymsAction = $root.google.cloud.retail.v2alpha.Rule.TwowaySynonymsAction.fromObject(object.twowaySynonymsAction);
+                                message.twowaySynonymsAction = $root.google.cloud.retail.v2alpha.Rule.TwowaySynonymsAction.fromObject(object.twowaySynonymsAction, long + 1);
                             }
                             if (object.forceReturnFacetAction != null) {
                                 if (typeof object.forceReturnFacetAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.forceReturnFacetAction: object expected");
-                                message.forceReturnFacetAction = $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.fromObject(object.forceReturnFacetAction);
+                                message.forceReturnFacetAction = $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.fromObject(object.forceReturnFacetAction, long + 1);
                             }
                             if (object.removeFacetAction != null) {
                                 if (typeof object.removeFacetAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.removeFacetAction: object expected");
-                                message.removeFacetAction = $root.google.cloud.retail.v2alpha.Rule.RemoveFacetAction.fromObject(object.removeFacetAction);
+                                message.removeFacetAction = $root.google.cloud.retail.v2alpha.Rule.RemoveFacetAction.fromObject(object.removeFacetAction, long + 1);
                             }
                             if (object.pinAction != null) {
                                 if (typeof object.pinAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.pinAction: object expected");
-                                message.pinAction = $root.google.cloud.retail.v2alpha.Rule.PinAction.fromObject(object.pinAction);
+                                message.pinAction = $root.google.cloud.retail.v2alpha.Rule.PinAction.fromObject(object.pinAction, long + 1);
                             }
                             if (object.condition != null) {
                                 if (typeof object.condition !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Rule.condition: object expected");
-                                message.condition = $root.google.cloud.retail.v2alpha.Condition.fromObject(object.condition);
+                                message.condition = $root.google.cloud.retail.v2alpha.Condition.fromObject(object.condition, long + 1);
                             }
                             return message;
                         };
@@ -67832,7 +70707,7 @@
                             function BoostAction(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -67907,9 +70782,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BoostAction.decode = function decode(reader, length, error) {
+                            BoostAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.BoostAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -67925,7 +70804,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -67956,9 +70835,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BoostAction.verify = function verify(message) {
+                            BoostAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.boost != null && message.hasOwnProperty("boost"))
                                     if (typeof message.boost !== "number")
                                         return "boost: number expected";
@@ -67976,9 +70859,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.BoostAction} BoostAction
                              */
-                            BoostAction.fromObject = function fromObject(object) {
+                            BoostAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.BoostAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.BoostAction();
                                 if (object.boost != null)
                                     message.boost = Number(object.boost);
@@ -68060,7 +70947,7 @@
                             function FilterAction(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -68125,9 +71012,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FilterAction.decode = function decode(reader, length, error) {
+                            FilterAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.FilterAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -68139,7 +71030,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -68170,9 +71061,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FilterAction.verify = function verify(message) {
+                            FilterAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.filter != null && message.hasOwnProperty("filter"))
                                     if (!$util.isString(message.filter))
                                         return "filter: string expected";
@@ -68187,9 +71082,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.FilterAction} FilterAction
                              */
-                            FilterAction.fromObject = function fromObject(object) {
+                            FilterAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.FilterAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.FilterAction();
                                 if (object.filter != null)
                                     message.filter = String(object.filter);
@@ -68265,7 +71164,7 @@
                             function RedirectAction(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -68330,9 +71229,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RedirectAction.decode = function decode(reader, length, error) {
+                            RedirectAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.RedirectAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -68344,7 +71247,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -68375,9 +71278,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RedirectAction.verify = function verify(message) {
+                            RedirectAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.redirectUri != null && message.hasOwnProperty("redirectUri"))
                                     if (!$util.isString(message.redirectUri))
                                         return "redirectUri: string expected";
@@ -68392,9 +71299,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.RedirectAction} RedirectAction
                              */
-                            RedirectAction.fromObject = function fromObject(object) {
+                            RedirectAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.RedirectAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.RedirectAction();
                                 if (object.redirectUri != null)
                                     message.redirectUri = String(object.redirectUri);
@@ -68471,7 +71382,7 @@
                                 this.synonyms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -68537,9 +71448,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TwowaySynonymsAction.decode = function decode(reader, length, error) {
+                            TwowaySynonymsAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.TwowaySynonymsAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -68553,7 +71468,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -68584,9 +71499,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TwowaySynonymsAction.verify = function verify(message) {
+                            TwowaySynonymsAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.synonyms != null && message.hasOwnProperty("synonyms")) {
                                     if (!Array.isArray(message.synonyms))
                                         return "synonyms: array expected";
@@ -68605,9 +71524,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.TwowaySynonymsAction} TwowaySynonymsAction
                              */
-                            TwowaySynonymsAction.fromObject = function fromObject(object) {
+                            TwowaySynonymsAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.TwowaySynonymsAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.TwowaySynonymsAction();
                                 if (object.synonyms) {
                                     if (!Array.isArray(object.synonyms))
@@ -68696,7 +71619,7 @@
                                 this.onewayTerms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -68784,9 +71707,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            OnewaySynonymsAction.decode = function decode(reader, length, error) {
+                            OnewaySynonymsAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.OnewaySynonymsAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -68812,7 +71739,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -68843,9 +71770,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            OnewaySynonymsAction.verify = function verify(message) {
+                            OnewaySynonymsAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                     if (!Array.isArray(message.queryTerms))
                                         return "queryTerms: array expected";
@@ -68878,9 +71809,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.OnewaySynonymsAction} OnewaySynonymsAction
                              */
-                            OnewaySynonymsAction.fromObject = function fromObject(object) {
+                            OnewaySynonymsAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.OnewaySynonymsAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.OnewaySynonymsAction();
                                 if (object.queryTerms) {
                                     if (!Array.isArray(object.queryTerms))
@@ -68996,7 +71931,7 @@
                                 this.terms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -69084,9 +72019,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DoNotAssociateAction.decode = function decode(reader, length, error) {
+                            DoNotAssociateAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.DoNotAssociateAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -69112,7 +72051,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -69143,9 +72082,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DoNotAssociateAction.verify = function verify(message) {
+                            DoNotAssociateAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                     if (!Array.isArray(message.queryTerms))
                                         return "queryTerms: array expected";
@@ -69178,9 +72121,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.DoNotAssociateAction} DoNotAssociateAction
                              */
-                            DoNotAssociateAction.fromObject = function fromObject(object) {
+                            DoNotAssociateAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.DoNotAssociateAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.DoNotAssociateAction();
                                 if (object.queryTerms) {
                                     if (!Array.isArray(object.queryTerms))
@@ -69294,7 +72241,7 @@
                                 this.queryTerms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -69380,9 +72327,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ReplacementAction.decode = function decode(reader, length, error) {
+                            ReplacementAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.ReplacementAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -69404,7 +72355,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -69435,9 +72386,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ReplacementAction.verify = function verify(message) {
+                            ReplacementAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                     if (!Array.isArray(message.queryTerms))
                                         return "queryTerms: array expected";
@@ -69462,9 +72417,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.ReplacementAction} ReplacementAction
                              */
-                            ReplacementAction.fromObject = function fromObject(object) {
+                            ReplacementAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.ReplacementAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.ReplacementAction();
                                 if (object.queryTerms) {
                                     if (!Array.isArray(object.queryTerms))
@@ -69561,7 +72520,7 @@
                                 this.ignoreTerms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -69627,9 +72586,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            IgnoreAction.decode = function decode(reader, length, error) {
+                            IgnoreAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.IgnoreAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -69643,7 +72606,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -69674,9 +72637,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            IgnoreAction.verify = function verify(message) {
+                            IgnoreAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.ignoreTerms != null && message.hasOwnProperty("ignoreTerms")) {
                                     if (!Array.isArray(message.ignoreTerms))
                                         return "ignoreTerms: array expected";
@@ -69695,9 +72662,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.IgnoreAction} IgnoreAction
                              */
-                            IgnoreAction.fromObject = function fromObject(object) {
+                            IgnoreAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.IgnoreAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.IgnoreAction();
                                 if (object.ignoreTerms) {
                                     if (!Array.isArray(object.ignoreTerms))
@@ -69782,7 +72753,7 @@
                                 this.facetPositionAdjustments = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -69848,9 +72819,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ForceReturnFacetAction.decode = function decode(reader, length, error) {
+                            ForceReturnFacetAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -69860,11 +72835,11 @@
                                     case 1: {
                                             if (!(message.facetPositionAdjustments && message.facetPositionAdjustments.length))
                                                 message.facetPositionAdjustments = [];
-                                            message.facetPositionAdjustments.push($root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.FacetPositionAdjustment.decode(reader, reader.uint32()));
+                                            message.facetPositionAdjustments.push($root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.FacetPositionAdjustment.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -69895,14 +72870,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ForceReturnFacetAction.verify = function verify(message) {
+                            ForceReturnFacetAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.facetPositionAdjustments != null && message.hasOwnProperty("facetPositionAdjustments")) {
                                     if (!Array.isArray(message.facetPositionAdjustments))
                                         return "facetPositionAdjustments: array expected";
                                     for (var i = 0; i < message.facetPositionAdjustments.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.FacetPositionAdjustment.verify(message.facetPositionAdjustments[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.FacetPositionAdjustment.verify(message.facetPositionAdjustments[i], long + 1);
                                         if (error)
                                             return "facetPositionAdjustments." + error;
                                     }
@@ -69918,9 +72897,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction} ForceReturnFacetAction
                              */
-                            ForceReturnFacetAction.fromObject = function fromObject(object) {
+                            ForceReturnFacetAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction();
                                 if (object.facetPositionAdjustments) {
                                     if (!Array.isArray(object.facetPositionAdjustments))
@@ -69929,7 +72912,7 @@
                                     for (var i = 0; i < object.facetPositionAdjustments.length; ++i) {
                                         if (typeof object.facetPositionAdjustments[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.facetPositionAdjustments: object expected");
-                                        message.facetPositionAdjustments[i] = $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.FacetPositionAdjustment.fromObject(object.facetPositionAdjustments[i]);
+                                        message.facetPositionAdjustments[i] = $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.FacetPositionAdjustment.fromObject(object.facetPositionAdjustments[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -70005,7 +72988,7 @@
                                 function FacetPositionAdjustment(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -70080,9 +73063,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FacetPositionAdjustment.decode = function decode(reader, length, error) {
+                                FacetPositionAdjustment.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.FacetPositionAdjustment();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -70098,7 +73085,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -70129,9 +73116,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FacetPositionAdjustment.verify = function verify(message) {
+                                FacetPositionAdjustment.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.attributeName != null && message.hasOwnProperty("attributeName"))
                                         if (!$util.isString(message.attributeName))
                                             return "attributeName: string expected";
@@ -70149,9 +73140,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.FacetPositionAdjustment} FacetPositionAdjustment
                                  */
-                                FacetPositionAdjustment.fromObject = function fromObject(object) {
+                                FacetPositionAdjustment.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.FacetPositionAdjustment)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.Rule.ForceReturnFacetAction.FacetPositionAdjustment();
                                     if (object.attributeName != null)
                                         message.attributeName = String(object.attributeName);
@@ -70237,7 +73232,7 @@
                                 this.attributeNames = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -70303,9 +73298,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RemoveFacetAction.decode = function decode(reader, length, error) {
+                            RemoveFacetAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.RemoveFacetAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -70319,7 +73318,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -70350,9 +73349,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RemoveFacetAction.verify = function verify(message) {
+                            RemoveFacetAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.attributeNames != null && message.hasOwnProperty("attributeNames")) {
                                     if (!Array.isArray(message.attributeNames))
                                         return "attributeNames: array expected";
@@ -70371,9 +73374,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.RemoveFacetAction} RemoveFacetAction
                              */
-                            RemoveFacetAction.fromObject = function fromObject(object) {
+                            RemoveFacetAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.RemoveFacetAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.RemoveFacetAction();
                                 if (object.attributeNames) {
                                     if (!Array.isArray(object.attributeNames))
@@ -70458,7 +73465,7 @@
                                 this.pinMap = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -70524,9 +73531,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PinAction.decode = function decode(reader, length, error) {
+                            PinAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rule.PinAction(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -70549,7 +73560,7 @@
                                                     value = reader.string();
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
@@ -70557,7 +73568,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -70588,9 +73599,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PinAction.verify = function verify(message) {
+                            PinAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.pinMap != null && message.hasOwnProperty("pinMap")) {
                                     if (!$util.isObject(message.pinMap))
                                         return "pinMap: object expected";
@@ -70613,16 +73628,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Rule.PinAction} PinAction
                              */
-                            PinAction.fromObject = function fromObject(object) {
+                            PinAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Rule.PinAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Rule.PinAction();
                                 if (object.pinMap) {
                                     if (typeof object.pinMap !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Rule.PinAction.pinMap: object expected");
                                     message.pinMap = {};
-                                    for (var keys = Object.keys(object.pinMap), i = 0; i < keys.length; ++i)
+                                    for (var keys = Object.keys(object.pinMap), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.pinMap, keys[i]);
                                         message.pinMap[keys[i]] = String(object.pinMap[keys[i]]);
+                                    }
                                 }
                                 return message;
                             };
@@ -70645,8 +73667,11 @@
                                 var keys2;
                                 if (message.pinMap && (keys2 = Object.keys(message.pinMap)).length) {
                                     object.pinMap = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.pinMap, keys2[j]);
                                         object.pinMap[keys2[j]] = message.pinMap[keys2[j]];
+                                    }
                                 }
                                 return object;
                             };
@@ -70706,7 +73731,7 @@
                             this.ageGroups = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -70783,9 +73808,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Audience.decode = function decode(reader, length, error) {
+                        Audience.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Audience();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -70805,7 +73834,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -70836,9 +73865,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Audience.verify = function verify(message) {
+                        Audience.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.genders != null && message.hasOwnProperty("genders")) {
                                 if (!Array.isArray(message.genders))
                                     return "genders: array expected";
@@ -70864,9 +73897,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Audience} Audience
                          */
-                        Audience.fromObject = function fromObject(object) {
+                        Audience.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Audience)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Audience();
                             if (object.genders) {
                                 if (!Array.isArray(object.genders))
@@ -70967,7 +74004,7 @@
                             this.colors = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -71044,9 +74081,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ColorInfo.decode = function decode(reader, length, error) {
+                        ColorInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ColorInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -71066,7 +74107,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -71097,9 +74138,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ColorInfo.verify = function verify(message) {
+                        ColorInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.colorFamilies != null && message.hasOwnProperty("colorFamilies")) {
                                 if (!Array.isArray(message.colorFamilies))
                                     return "colorFamilies: array expected";
@@ -71125,9 +74170,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ColorInfo} ColorInfo
                          */
-                        ColorInfo.fromObject = function fromObject(object) {
+                        ColorInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ColorInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ColorInfo();
                             if (object.colorFamilies) {
                                 if (!Array.isArray(object.colorFamilies))
@@ -71230,7 +74279,7 @@
                             this.numbers = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -71345,9 +74394,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CustomAttribute.decode = function decode(reader, length, error) {
+                        CustomAttribute.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CustomAttribute();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -71380,7 +74433,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -71411,9 +74464,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CustomAttribute.verify = function verify(message) {
+                        CustomAttribute.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.text != null && message.hasOwnProperty("text")) {
                                 if (!Array.isArray(message.text))
@@ -71450,9 +74507,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CustomAttribute} CustomAttribute
                          */
-                        CustomAttribute.fromObject = function fromObject(object) {
+                        CustomAttribute.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CustomAttribute)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CustomAttribute();
                             if (object.text) {
                                 if (!Array.isArray(object.text))
@@ -71566,7 +74627,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -71642,9 +74703,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        FulfillmentInfo.decode = function decode(reader, length, error) {
+                        FulfillmentInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.FulfillmentInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -71662,7 +74727,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -71693,9 +74758,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        FulfillmentInfo.verify = function verify(message) {
+                        FulfillmentInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.type != null && message.hasOwnProperty("type"))
                                 if (!$util.isString(message.type))
                                     return "type: string expected";
@@ -71717,9 +74786,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.FulfillmentInfo} FulfillmentInfo
                          */
-                        FulfillmentInfo.fromObject = function fromObject(object) {
+                        FulfillmentInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.FulfillmentInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.FulfillmentInfo();
                             if (object.type != null)
                                 message.type = String(object.type);
@@ -71811,7 +74884,7 @@
                         function Image(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -71896,9 +74969,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Image.decode = function decode(reader, length, error) {
+                        Image.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Image();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -71918,7 +74995,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -71949,9 +75026,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Image.verify = function verify(message) {
+                        Image.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.uri != null && message.hasOwnProperty("uri"))
                                 if (!$util.isString(message.uri))
                                     return "uri: string expected";
@@ -71972,9 +75053,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Image} Image
                          */
-                        Image.fromObject = function fromObject(object) {
+                        Image.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Image)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Image();
                             if (object.uri != null)
                                 message.uri = String(object.uri);
@@ -72064,7 +75149,7 @@
                         function Interval(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -72184,9 +75269,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Interval.decode = function decode(reader, length, error) {
+                        Interval.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Interval();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -72210,7 +75299,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -72241,9 +75330,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Interval.verify = function verify(message) {
+                        Interval.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.minimum != null && message.hasOwnProperty("minimum")) {
                                 properties.min = 1;
@@ -72280,9 +75373,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Interval} Interval
                          */
-                        Interval.fromObject = function fromObject(object) {
+                        Interval.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Interval)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Interval();
                             if (object.minimum != null)
                                 message.minimum = Number(object.minimum);
@@ -72386,7 +75483,7 @@
                         function PriceInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -72511,9 +75608,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PriceInfo.decode = function decode(reader, length, error) {
+                        PriceInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PriceInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -72537,19 +75638,19 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.priceEffectiveTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.priceEffectiveTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.priceExpireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.priceExpireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.priceRange = $root.google.cloud.retail.v2alpha.PriceInfo.PriceRange.decode(reader, reader.uint32());
+                                        message.priceRange = $root.google.cloud.retail.v2alpha.PriceInfo.PriceRange.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -72580,9 +75681,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PriceInfo.verify = function verify(message) {
+                        PriceInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.currencyCode != null && message.hasOwnProperty("currencyCode"))
                                 if (!$util.isString(message.currencyCode))
                                     return "currencyCode: string expected";
@@ -72596,17 +75701,17 @@
                                 if (typeof message.cost !== "number")
                                     return "cost: number expected";
                             if (message.priceEffectiveTime != null && message.hasOwnProperty("priceEffectiveTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.priceEffectiveTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.priceEffectiveTime, long + 1);
                                 if (error)
                                     return "priceEffectiveTime." + error;
                             }
                             if (message.priceExpireTime != null && message.hasOwnProperty("priceExpireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.priceExpireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.priceExpireTime, long + 1);
                                 if (error)
                                     return "priceExpireTime." + error;
                             }
                             if (message.priceRange != null && message.hasOwnProperty("priceRange")) {
-                                var error = $root.google.cloud.retail.v2alpha.PriceInfo.PriceRange.verify(message.priceRange);
+                                var error = $root.google.cloud.retail.v2alpha.PriceInfo.PriceRange.verify(message.priceRange, long + 1);
                                 if (error)
                                     return "priceRange." + error;
                             }
@@ -72621,9 +75726,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PriceInfo} PriceInfo
                          */
-                        PriceInfo.fromObject = function fromObject(object) {
+                        PriceInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PriceInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PriceInfo();
                             if (object.currencyCode != null)
                                 message.currencyCode = String(object.currencyCode);
@@ -72636,17 +75745,17 @@
                             if (object.priceEffectiveTime != null) {
                                 if (typeof object.priceEffectiveTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.PriceInfo.priceEffectiveTime: object expected");
-                                message.priceEffectiveTime = $root.google.protobuf.Timestamp.fromObject(object.priceEffectiveTime);
+                                message.priceEffectiveTime = $root.google.protobuf.Timestamp.fromObject(object.priceEffectiveTime, long + 1);
                             }
                             if (object.priceExpireTime != null) {
                                 if (typeof object.priceExpireTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.PriceInfo.priceExpireTime: object expected");
-                                message.priceExpireTime = $root.google.protobuf.Timestamp.fromObject(object.priceExpireTime);
+                                message.priceExpireTime = $root.google.protobuf.Timestamp.fromObject(object.priceExpireTime, long + 1);
                             }
                             if (object.priceRange != null) {
                                 if (typeof object.priceRange !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.PriceInfo.priceRange: object expected");
-                                message.priceRange = $root.google.cloud.retail.v2alpha.PriceInfo.PriceRange.fromObject(object.priceRange);
+                                message.priceRange = $root.google.cloud.retail.v2alpha.PriceInfo.PriceRange.fromObject(object.priceRange, long + 1);
                             }
                             return message;
                         };
@@ -72737,7 +75846,7 @@
                             function PriceRange(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -72812,9 +75921,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PriceRange.decode = function decode(reader, length, error) {
+                            PriceRange.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PriceInfo.PriceRange();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -72822,15 +75935,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.price = $root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32());
+                                            message.price = $root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.originalPrice = $root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32());
+                                            message.originalPrice = $root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -72861,16 +75974,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PriceRange.verify = function verify(message) {
+                            PriceRange.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.price != null && message.hasOwnProperty("price")) {
-                                    var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.price);
+                                    var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.price, long + 1);
                                     if (error)
                                         return "price." + error;
                                 }
                                 if (message.originalPrice != null && message.hasOwnProperty("originalPrice")) {
-                                    var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.originalPrice);
+                                    var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.originalPrice, long + 1);
                                     if (error)
                                         return "originalPrice." + error;
                                 }
@@ -72885,19 +76002,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.PriceInfo.PriceRange} PriceRange
                              */
-                            PriceRange.fromObject = function fromObject(object) {
+                            PriceRange.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.PriceInfo.PriceRange)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.PriceInfo.PriceRange();
                                 if (object.price != null) {
                                     if (typeof object.price !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.PriceInfo.PriceRange.price: object expected");
-                                    message.price = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.price);
+                                    message.price = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.price, long + 1);
                                 }
                                 if (object.originalPrice != null) {
                                     if (typeof object.originalPrice !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.PriceInfo.PriceRange.originalPrice: object expected");
-                                    message.originalPrice = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.originalPrice);
+                                    message.originalPrice = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.originalPrice, long + 1);
                                 }
                                 return message;
                             };
@@ -72981,7 +76102,7 @@
                             this.ratingHistogram = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -73070,9 +76191,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Rating.decode = function decode(reader, length, error) {
+                        Rating.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Rating();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -73099,7 +76224,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -73130,9 +76255,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Rating.verify = function verify(message) {
+                        Rating.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.ratingCount != null && message.hasOwnProperty("ratingCount"))
                                 if (!$util.isInteger(message.ratingCount))
                                     return "ratingCount: integer expected";
@@ -73157,9 +76286,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Rating} Rating
                          */
-                        Rating.fromObject = function fromObject(object) {
+                        Rating.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Rating)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Rating();
                             if (object.ratingCount != null)
                                 message.ratingCount = object.ratingCount | 0;
@@ -73258,7 +76391,7 @@
                         function UserInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -73353,9 +76486,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserInfo.decode = function decode(reader, length, error) {
+                        UserInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UserInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -73379,7 +76516,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -73410,9 +76547,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserInfo.verify = function verify(message) {
+                        UserInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.userId != null && message.hasOwnProperty("userId"))
                                 if (!$util.isString(message.userId))
                                     return "userId: string expected";
@@ -73436,9 +76577,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UserInfo} UserInfo
                          */
-                        UserInfo.fromObject = function fromObject(object) {
+                        UserInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UserInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UserInfo();
                             if (object.userId != null)
                                 message.userId = String(object.userId);
@@ -73536,7 +76681,7 @@
                             this.fulfillmentTypes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -73645,9 +76790,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        LocalInventory.decode = function decode(reader, length, error) {
+                        LocalInventory.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.LocalInventory(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -73659,7 +76808,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.priceInfo = $root.google.cloud.retail.v2alpha.PriceInfo.decode(reader, reader.uint32());
+                                        message.priceInfo = $root.google.cloud.retail.v2alpha.PriceInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -73679,13 +76828,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2alpha.CustomAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2alpha.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributes, key);
                                         message.attributes[key] = value;
                                         break;
                                     }
@@ -73696,7 +76847,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -73727,14 +76878,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        LocalInventory.verify = function verify(message) {
+                        LocalInventory.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.placeId != null && message.hasOwnProperty("placeId"))
                                 if (!$util.isString(message.placeId))
                                     return "placeId: string expected";
                             if (message.priceInfo != null && message.hasOwnProperty("priceInfo")) {
-                                var error = $root.google.cloud.retail.v2alpha.PriceInfo.verify(message.priceInfo);
+                                var error = $root.google.cloud.retail.v2alpha.PriceInfo.verify(message.priceInfo, long + 1);
                                 if (error)
                                     return "priceInfo." + error;
                             }
@@ -73754,7 +76909,7 @@
                                     return "attributes: object expected";
                                 var key = Object.keys(message.attributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.CustomAttribute.verify(message.attributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2alpha.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                     if (error)
                                         return "attributes." + error;
                                 }
@@ -73777,16 +76932,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.LocalInventory} LocalInventory
                          */
-                        LocalInventory.fromObject = function fromObject(object) {
+                        LocalInventory.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.LocalInventory)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.LocalInventory();
                             if (object.placeId != null)
                                 message.placeId = String(object.placeId);
                             if (object.priceInfo != null) {
                                 if (typeof object.priceInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.LocalInventory.priceInfo: object expected");
-                                message.priceInfo = $root.google.cloud.retail.v2alpha.PriceInfo.fromObject(object.priceInfo);
+                                message.priceInfo = $root.google.cloud.retail.v2alpha.PriceInfo.fromObject(object.priceInfo, long + 1);
                             }
                             switch (object.availability) {
                             default:
@@ -73821,9 +76980,11 @@
                                     throw TypeError(".google.cloud.retail.v2alpha.LocalInventory.attributes: object expected");
                                 message.attributes = {};
                                 for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributes, keys[i]);
                                     if (typeof object.attributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.LocalInventory.attributes: object expected");
-                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2alpha.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2alpha.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                 }
                             }
                             if (object.fulfillmentTypes) {
@@ -73865,8 +77026,11 @@
                             var keys2;
                             if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                 object.attributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributes, keys2[j]);
                                     object.attributes[keys2[j]] = $root.google.cloud.retail.v2alpha.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                }
                             }
                             if (message.fulfillmentTypes && message.fulfillmentTypes.length) {
                                 object.fulfillmentTypes = [];
@@ -73950,7 +77114,7 @@
                             this.droppedPins = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -74031,9 +77195,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PinControlMetadata.decode = function decode(reader, length, error) {
+                        PinControlMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PinControlMetadata(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -74053,10 +77221,10 @@
                                                 key = reader.int64();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
@@ -74076,10 +77244,10 @@
                                                 key = reader.int64();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
@@ -74087,7 +77255,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -74118,9 +77286,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PinControlMetadata.verify = function verify(message) {
+                        PinControlMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.allMatchedPins != null && message.hasOwnProperty("allMatchedPins")) {
                                 if (!$util.isObject(message.allMatchedPins))
                                     return "allMatchedPins: object expected";
@@ -74129,7 +77301,7 @@
                                     if (!$util.key64Re.test(key[i]))
                                         return "allMatchedPins: integer|Long key{k:int64} expected";
                                     {
-                                        var error = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.verify(message.allMatchedPins[key[i]]);
+                                        var error = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.verify(message.allMatchedPins[key[i]], long + 1);
                                         if (error)
                                             return "allMatchedPins." + error;
                                     }
@@ -74143,7 +77315,7 @@
                                     if (!$util.key64Re.test(key[i]))
                                         return "droppedPins: integer|Long key{k:int64} expected";
                                     {
-                                        var error = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.verify(message.droppedPins[key[i]]);
+                                        var error = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.verify(message.droppedPins[key[i]], long + 1);
                                         if (error)
                                             return "droppedPins." + error;
                                     }
@@ -74160,18 +77332,24 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PinControlMetadata} PinControlMetadata
                          */
-                        PinControlMetadata.fromObject = function fromObject(object) {
+                        PinControlMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PinControlMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PinControlMetadata();
                             if (object.allMatchedPins) {
                                 if (typeof object.allMatchedPins !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.PinControlMetadata.allMatchedPins: object expected");
                                 message.allMatchedPins = {};
                                 for (var keys = Object.keys(object.allMatchedPins), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.allMatchedPins, keys[i]);
                                     if (typeof object.allMatchedPins[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.PinControlMetadata.allMatchedPins: object expected");
-                                    message.allMatchedPins[keys[i]] = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.fromObject(object.allMatchedPins[keys[i]]);
+                                    message.allMatchedPins[keys[i]] = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.fromObject(object.allMatchedPins[keys[i]], long + 1);
                                 }
                             }
                             if (object.droppedPins) {
@@ -74179,9 +77357,11 @@
                                     throw TypeError(".google.cloud.retail.v2alpha.PinControlMetadata.droppedPins: object expected");
                                 message.droppedPins = {};
                                 for (var keys = Object.keys(object.droppedPins), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.droppedPins, keys[i]);
                                     if (typeof object.droppedPins[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.PinControlMetadata.droppedPins: object expected");
-                                    message.droppedPins[keys[i]] = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.fromObject(object.droppedPins[keys[i]]);
+                                    message.droppedPins[keys[i]] = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.fromObject(object.droppedPins[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -74207,13 +77387,19 @@
                             var keys2;
                             if (message.allMatchedPins && (keys2 = Object.keys(message.allMatchedPins)).length) {
                                 object.allMatchedPins = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.allMatchedPins, keys2[j]);
                                     object.allMatchedPins[keys2[j]] = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.toObject(message.allMatchedPins[keys2[j]], options);
+                                }
                             }
                             if (message.droppedPins && (keys2 = Object.keys(message.droppedPins)).length) {
                                 object.droppedPins = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.droppedPins, keys2[j]);
                                     object.droppedPins[keys2[j]] = $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins.toObject(message.droppedPins[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -74265,7 +77451,7 @@
                                 this.productId = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -74331,9 +77517,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ProductPins.decode = function decode(reader, length, error) {
+                            ProductPins.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -74347,7 +77537,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -74378,9 +77568,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ProductPins.verify = function verify(message) {
+                            ProductPins.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.productId != null && message.hasOwnProperty("productId")) {
                                     if (!Array.isArray(message.productId))
                                         return "productId: array expected";
@@ -74399,9 +77593,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.PinControlMetadata.ProductPins} ProductPins
                              */
-                            ProductPins.fromObject = function fromObject(object) {
+                            ProductPins.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.PinControlMetadata.ProductPins();
                                 if (object.productId) {
                                     if (!Array.isArray(object.productId))
@@ -74489,7 +77687,7 @@
                             this.values = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -74555,9 +77753,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        StringList.decode = function decode(reader, length, error) {
+                        StringList.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.StringList();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -74571,7 +77773,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -74602,9 +77804,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        StringList.verify = function verify(message) {
+                        StringList.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.values != null && message.hasOwnProperty("values")) {
                                 if (!Array.isArray(message.values))
                                     return "values: array expected";
@@ -74623,9 +77829,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.StringList} StringList
                          */
-                        StringList.fromObject = function fromObject(object) {
+                        StringList.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.StringList)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.StringList();
                             if (object.values) {
                                 if (!Array.isArray(object.values))
@@ -74710,7 +77920,7 @@
                             this.values = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -74779,9 +77989,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DoubleList.decode = function decode(reader, length, error) {
+                        DoubleList.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.DoubleList();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -74800,7 +78014,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -74831,9 +78045,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DoubleList.verify = function verify(message) {
+                        DoubleList.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.values != null && message.hasOwnProperty("values")) {
                                 if (!Array.isArray(message.values))
                                     return "values: array expected";
@@ -74852,9 +78070,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.DoubleList} DoubleList
                          */
-                        DoubleList.fromObject = function fromObject(object) {
+                        DoubleList.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.DoubleList)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.DoubleList();
                             if (object.values) {
                                 if (!Array.isArray(object.values))
@@ -74938,7 +78160,7 @@
                         function Promotion(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -75003,9 +78225,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Promotion.decode = function decode(reader, length, error) {
+                        Promotion.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Promotion();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -75017,7 +78243,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -75048,9 +78274,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Promotion.verify = function verify(message) {
+                        Promotion.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.promotionId != null && message.hasOwnProperty("promotionId"))
                                 if (!$util.isString(message.promotionId))
                                     return "promotionId: string expected";
@@ -75065,9 +78295,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Promotion} Promotion
                          */
-                        Promotion.fromObject = function fromObject(object) {
+                        Promotion.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Promotion)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Promotion();
                             if (object.promotionId != null)
                                 message.promotionId = String(object.promotionId);
@@ -75245,7 +78479,7 @@
                         function ListBranchesRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -75320,9 +78554,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListBranchesRequest.decode = function decode(reader, length, error) {
+                        ListBranchesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListBranchesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -75338,7 +78576,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -75369,9 +78607,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListBranchesRequest.verify = function verify(message) {
+                        ListBranchesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -75395,9 +78637,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListBranchesRequest} ListBranchesRequest
                          */
-                        ListBranchesRequest.fromObject = function fromObject(object) {
+                        ListBranchesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListBranchesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListBranchesRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -75498,7 +78744,7 @@
                             this.branches = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -75564,9 +78810,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListBranchesResponse.decode = function decode(reader, length, error) {
+                        ListBranchesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListBranchesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -75576,11 +78826,11 @@
                                 case 1: {
                                         if (!(message.branches && message.branches.length))
                                             message.branches = [];
-                                        message.branches.push($root.google.cloud.retail.v2alpha.Branch.decode(reader, reader.uint32()));
+                                        message.branches.push($root.google.cloud.retail.v2alpha.Branch.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -75611,14 +78861,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListBranchesResponse.verify = function verify(message) {
+                        ListBranchesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.branches != null && message.hasOwnProperty("branches")) {
                                 if (!Array.isArray(message.branches))
                                     return "branches: array expected";
                                 for (var i = 0; i < message.branches.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Branch.verify(message.branches[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Branch.verify(message.branches[i], long + 1);
                                     if (error)
                                         return "branches." + error;
                                 }
@@ -75634,9 +78888,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListBranchesResponse} ListBranchesResponse
                          */
-                        ListBranchesResponse.fromObject = function fromObject(object) {
+                        ListBranchesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListBranchesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListBranchesResponse();
                             if (object.branches) {
                                 if (!Array.isArray(object.branches))
@@ -75645,7 +78903,7 @@
                                 for (var i = 0; i < object.branches.length; ++i) {
                                     if (typeof object.branches[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ListBranchesResponse.branches: object expected");
-                                    message.branches[i] = $root.google.cloud.retail.v2alpha.Branch.fromObject(object.branches[i]);
+                                    message.branches[i] = $root.google.cloud.retail.v2alpha.Branch.fromObject(object.branches[i], long + 1);
                                 }
                             }
                             return message;
@@ -75724,7 +78982,7 @@
                         function GetBranchRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -75799,9 +79057,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetBranchRequest.decode = function decode(reader, length, error) {
+                        GetBranchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetBranchRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -75817,7 +79079,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -75848,9 +79110,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetBranchRequest.verify = function verify(message) {
+                        GetBranchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -75874,9 +79140,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetBranchRequest} GetBranchRequest
                          */
-                        GetBranchRequest.fromObject = function fromObject(object) {
+                        GetBranchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetBranchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetBranchRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -75977,7 +79247,7 @@
                         function ProductLevelConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -76052,9 +79322,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductLevelConfig.decode = function decode(reader, length, error) {
+                        ProductLevelConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ProductLevelConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -76070,7 +79344,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -76101,9 +79375,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductLevelConfig.verify = function verify(message) {
+                        ProductLevelConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.ingestionProductType != null && message.hasOwnProperty("ingestionProductType"))
                                 if (!$util.isString(message.ingestionProductType))
                                     return "ingestionProductType: string expected";
@@ -76121,9 +79399,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ProductLevelConfig} ProductLevelConfig
                          */
-                        ProductLevelConfig.fromObject = function fromObject(object) {
+                        ProductLevelConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ProductLevelConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ProductLevelConfig();
                             if (object.ingestionProductType != null)
                                 message.ingestionProductType = String(object.ingestionProductType);
@@ -76214,7 +79496,7 @@
                         function CatalogAttribute(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -76369,9 +79651,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CatalogAttribute.decode = function decode(reader, length, error) {
+                        CatalogAttribute.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CatalogAttribute();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -76415,11 +79701,11 @@
                                         break;
                                     }
                                 case 13: {
-                                        message.facetConfig = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.decode(reader, reader.uint32());
+                                        message.facetConfig = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -76450,9 +79736,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CatalogAttribute.verify = function verify(message) {
+                        CatalogAttribute.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.key != null && message.hasOwnProperty("key"))
                                 if (!$util.isString(message.key))
                                     return "key: string expected";
@@ -76523,7 +79813,7 @@
                                     break;
                                 }
                             if (message.facetConfig != null && message.hasOwnProperty("facetConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.verify(message.facetConfig);
+                                var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.verify(message.facetConfig, long + 1);
                                 if (error)
                                     return "facetConfig." + error;
                             }
@@ -76538,9 +79828,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CatalogAttribute} CatalogAttribute
                          */
-                        CatalogAttribute.fromObject = function fromObject(object) {
+                        CatalogAttribute.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CatalogAttribute)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CatalogAttribute();
                             if (object.key != null)
                                 message.key = String(object.key);
@@ -76689,7 +79983,7 @@
                             if (object.facetConfig != null) {
                                 if (typeof object.facetConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CatalogAttribute.facetConfig: object expected");
-                                message.facetConfig = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.fromObject(object.facetConfig);
+                                message.facetConfig = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.fromObject(object.facetConfig, long + 1);
                             }
                             return message;
                         };
@@ -76795,7 +80089,7 @@
                                 this.mergedFacetValues = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -76903,9 +80197,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FacetConfig.decode = function decode(reader, length, error) {
+                            FacetConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -76915,31 +80213,31 @@
                                     case 1: {
                                             if (!(message.facetIntervals && message.facetIntervals.length))
                                                 message.facetIntervals = [];
-                                            message.facetIntervals.push($root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32()));
+                                            message.facetIntervals.push($root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
                                             if (!(message.ignoredFacetValues && message.ignoredFacetValues.length))
                                                 message.ignoredFacetValues = [];
-                                            message.ignoredFacetValues.push($root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues.decode(reader, reader.uint32()));
+                                            message.ignoredFacetValues.push($root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 3: {
                                             if (!(message.mergedFacetValues && message.mergedFacetValues.length))
                                                 message.mergedFacetValues = [];
-                                            message.mergedFacetValues.push($root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacetValue.decode(reader, reader.uint32()));
+                                            message.mergedFacetValues.push($root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacetValue.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 4: {
-                                            message.mergedFacet = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacet.decode(reader, reader.uint32());
+                                            message.mergedFacet = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacet.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 5: {
-                                            message.rerankConfig = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.RerankConfig.decode(reader, reader.uint32());
+                                            message.rerankConfig = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.RerankConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -76970,14 +80268,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FacetConfig.verify = function verify(message) {
+                            FacetConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.facetIntervals != null && message.hasOwnProperty("facetIntervals")) {
                                     if (!Array.isArray(message.facetIntervals))
                                         return "facetIntervals: array expected";
                                     for (var i = 0; i < message.facetIntervals.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.facetIntervals[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.facetIntervals[i], long + 1);
                                         if (error)
                                             return "facetIntervals." + error;
                                     }
@@ -76986,7 +80288,7 @@
                                     if (!Array.isArray(message.ignoredFacetValues))
                                         return "ignoredFacetValues: array expected";
                                     for (var i = 0; i < message.ignoredFacetValues.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues.verify(message.ignoredFacetValues[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues.verify(message.ignoredFacetValues[i], long + 1);
                                         if (error)
                                             return "ignoredFacetValues." + error;
                                     }
@@ -76995,18 +80297,18 @@
                                     if (!Array.isArray(message.mergedFacetValues))
                                         return "mergedFacetValues: array expected";
                                     for (var i = 0; i < message.mergedFacetValues.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacetValue.verify(message.mergedFacetValues[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacetValue.verify(message.mergedFacetValues[i], long + 1);
                                         if (error)
                                             return "mergedFacetValues." + error;
                                     }
                                 }
                                 if (message.mergedFacet != null && message.hasOwnProperty("mergedFacet")) {
-                                    var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacet.verify(message.mergedFacet);
+                                    var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacet.verify(message.mergedFacet, long + 1);
                                     if (error)
                                         return "mergedFacet." + error;
                                 }
                                 if (message.rerankConfig != null && message.hasOwnProperty("rerankConfig")) {
-                                    var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.RerankConfig.verify(message.rerankConfig);
+                                    var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.RerankConfig.verify(message.rerankConfig, long + 1);
                                     if (error)
                                         return "rerankConfig." + error;
                                 }
@@ -77021,9 +80323,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig} FacetConfig
                              */
-                            FacetConfig.fromObject = function fromObject(object) {
+                            FacetConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig();
                                 if (object.facetIntervals) {
                                     if (!Array.isArray(object.facetIntervals))
@@ -77032,7 +80338,7 @@
                                     for (var i = 0; i < object.facetIntervals.length; ++i) {
                                         if (typeof object.facetIntervals[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.facetIntervals: object expected");
-                                        message.facetIntervals[i] = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.facetIntervals[i]);
+                                        message.facetIntervals[i] = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.facetIntervals[i], long + 1);
                                     }
                                 }
                                 if (object.ignoredFacetValues) {
@@ -77042,7 +80348,7 @@
                                     for (var i = 0; i < object.ignoredFacetValues.length; ++i) {
                                         if (typeof object.ignoredFacetValues[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.ignoredFacetValues: object expected");
-                                        message.ignoredFacetValues[i] = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues.fromObject(object.ignoredFacetValues[i]);
+                                        message.ignoredFacetValues[i] = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues.fromObject(object.ignoredFacetValues[i], long + 1);
                                     }
                                 }
                                 if (object.mergedFacetValues) {
@@ -77052,18 +80358,18 @@
                                     for (var i = 0; i < object.mergedFacetValues.length; ++i) {
                                         if (typeof object.mergedFacetValues[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.mergedFacetValues: object expected");
-                                        message.mergedFacetValues[i] = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacetValue.fromObject(object.mergedFacetValues[i]);
+                                        message.mergedFacetValues[i] = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacetValue.fromObject(object.mergedFacetValues[i], long + 1);
                                     }
                                 }
                                 if (object.mergedFacet != null) {
                                     if (typeof object.mergedFacet !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.mergedFacet: object expected");
-                                    message.mergedFacet = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacet.fromObject(object.mergedFacet);
+                                    message.mergedFacet = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacet.fromObject(object.mergedFacet, long + 1);
                                 }
                                 if (object.rerankConfig != null) {
                                     if (typeof object.rerankConfig !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.rerankConfig: object expected");
-                                    message.rerankConfig = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.RerankConfig.fromObject(object.rerankConfig);
+                                    message.rerankConfig = $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.RerankConfig.fromObject(object.rerankConfig, long + 1);
                                 }
                                 return message;
                             };
@@ -77161,7 +80467,7 @@
                                     this.values = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -77247,9 +80553,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                IgnoredFacetValues.decode = function decode(reader, length, error) {
+                                IgnoredFacetValues.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -77263,15 +80573,15 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                                message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         case 3: {
-                                                message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                                message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -77302,9 +80612,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                IgnoredFacetValues.verify = function verify(message) {
+                                IgnoredFacetValues.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.values != null && message.hasOwnProperty("values")) {
                                         if (!Array.isArray(message.values))
                                             return "values: array expected";
@@ -77313,12 +80627,12 @@
                                                 return "values: string[] expected";
                                     }
                                     if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                        var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                        var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                         if (error)
                                             return "startTime." + error;
                                     }
                                     if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                        var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                        var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                         if (error)
                                             return "endTime." + error;
                                     }
@@ -77333,9 +80647,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues} IgnoredFacetValues
                                  */
-                                IgnoredFacetValues.fromObject = function fromObject(object) {
+                                IgnoredFacetValues.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues();
                                     if (object.values) {
                                         if (!Array.isArray(object.values))
@@ -77347,12 +80665,12 @@
                                     if (object.startTime != null) {
                                         if (typeof object.startTime !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues.startTime: object expected");
-                                        message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                        message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                                     }
                                     if (object.endTime != null) {
                                         if (typeof object.endTime !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.IgnoredFacetValues.endTime: object expected");
-                                        message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                        message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                                     }
                                     return message;
                                 };
@@ -77439,7 +80757,7 @@
                                     this.values = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -77515,9 +80833,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                MergedFacetValue.decode = function decode(reader, length, error) {
+                                MergedFacetValue.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacetValue();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -77535,7 +80857,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -77566,9 +80888,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                MergedFacetValue.verify = function verify(message) {
+                                MergedFacetValue.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.values != null && message.hasOwnProperty("values")) {
                                         if (!Array.isArray(message.values))
                                             return "values: array expected";
@@ -77590,9 +80916,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacetValue} MergedFacetValue
                                  */
-                                MergedFacetValue.fromObject = function fromObject(object) {
+                                MergedFacetValue.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacetValue)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacetValue();
                                     if (object.values) {
                                         if (!Array.isArray(object.values))
@@ -77682,7 +81012,7 @@
                                 function MergedFacet(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -77747,9 +81077,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                MergedFacet.decode = function decode(reader, length, error) {
+                                MergedFacet.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacet();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -77761,7 +81095,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -77792,9 +81126,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                MergedFacet.verify = function verify(message) {
+                                MergedFacet.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.mergedFacetKey != null && message.hasOwnProperty("mergedFacetKey"))
                                         if (!$util.isString(message.mergedFacetKey))
                                             return "mergedFacetKey: string expected";
@@ -77809,9 +81147,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacet} MergedFacet
                                  */
-                                MergedFacet.fromObject = function fromObject(object) {
+                                MergedFacet.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacet)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.MergedFacet();
                                     if (object.mergedFacetKey != null)
                                         message.mergedFacetKey = String(object.mergedFacetKey);
@@ -77889,7 +81231,7 @@
                                     this.facetValues = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -77965,9 +81307,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                RerankConfig.decode = function decode(reader, length, error) {
+                                RerankConfig.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.RerankConfig();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -77985,7 +81331,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -78016,9 +81362,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                RerankConfig.verify = function verify(message) {
+                                RerankConfig.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.rerankFacet != null && message.hasOwnProperty("rerankFacet"))
                                         if (typeof message.rerankFacet !== "boolean")
                                             return "rerankFacet: boolean expected";
@@ -78040,9 +81390,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.RerankConfig} RerankConfig
                                  */
-                                RerankConfig.fromObject = function fromObject(object) {
+                                RerankConfig.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.RerankConfig)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.CatalogAttribute.FacetConfig.RerankConfig();
                                     if (object.rerankFacet != null)
                                         message.rerankFacet = Boolean(object.rerankFacet);
@@ -78237,7 +81591,7 @@
                             this.catalogAttributes = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -78325,9 +81679,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AttributesConfig.decode = function decode(reader, length, error) {
+                        AttributesConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AttributesConfig(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -78351,13 +81709,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2alpha.CatalogAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2alpha.CatalogAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.catalogAttributes, key);
                                         message.catalogAttributes[key] = value;
                                         break;
                                     }
@@ -78366,7 +81726,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -78397,9 +81757,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AttributesConfig.verify = function verify(message) {
+                        AttributesConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -78408,7 +81772,7 @@
                                     return "catalogAttributes: object expected";
                                 var key = Object.keys(message.catalogAttributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.verify(message.catalogAttributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.verify(message.catalogAttributes[key[i]], long + 1);
                                     if (error)
                                         return "catalogAttributes." + error;
                                 }
@@ -78433,9 +81797,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AttributesConfig} AttributesConfig
                          */
-                        AttributesConfig.fromObject = function fromObject(object) {
+                        AttributesConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AttributesConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.AttributesConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -78444,9 +81812,11 @@
                                     throw TypeError(".google.cloud.retail.v2alpha.AttributesConfig.catalogAttributes: object expected");
                                 message.catalogAttributes = {};
                                 for (var keys = Object.keys(object.catalogAttributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.catalogAttributes, keys[i]);
                                     if (typeof object.catalogAttributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.AttributesConfig.catalogAttributes: object expected");
-                                    message.catalogAttributes[keys[i]] = $root.google.cloud.retail.v2alpha.CatalogAttribute.fromObject(object.catalogAttributes[keys[i]]);
+                                    message.catalogAttributes[keys[i]] = $root.google.cloud.retail.v2alpha.CatalogAttribute.fromObject(object.catalogAttributes[keys[i]], long + 1);
                                 }
                             }
                             switch (object.attributeConfigLevel) {
@@ -78496,8 +81866,11 @@
                             var keys2;
                             if (message.catalogAttributes && (keys2 = Object.keys(message.catalogAttributes)).length) {
                                 object.catalogAttributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.catalogAttributes, keys2[j]);
                                     object.catalogAttributes[keys2[j]] = $root.google.cloud.retail.v2alpha.CatalogAttribute.toObject(message.catalogAttributes[keys2[j]], options);
+                                }
                             }
                             if (message.attributeConfigLevel != null && message.hasOwnProperty("attributeConfigLevel"))
                                 object.attributeConfigLevel = options.enums === String ? $root.google.cloud.retail.v2alpha.AttributeConfigLevel[message.attributeConfigLevel] === undefined ? message.attributeConfigLevel : $root.google.cloud.retail.v2alpha.AttributeConfigLevel[message.attributeConfigLevel] : message.attributeConfigLevel;
@@ -78563,7 +81936,7 @@
                         function CompletionConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -78728,9 +82101,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompletionConfig.decode = function decode(reader, length, error) {
+                        CompletionConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CompletionConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -78758,7 +82135,7 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.suggestionsInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.suggestionsInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
@@ -78766,7 +82143,7 @@
                                         break;
                                     }
                                 case 7: {
-                                        message.denylistInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.denylistInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
@@ -78774,7 +82151,7 @@
                                         break;
                                     }
                                 case 9: {
-                                        message.allowlistInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.allowlistInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -78782,7 +82159,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -78813,9 +82190,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompletionConfig.verify = function verify(message) {
+                        CompletionConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -78832,7 +82213,7 @@
                                 if (typeof message.autoLearning !== "boolean")
                                     return "autoLearning: boolean expected";
                             if (message.suggestionsInputConfig != null && message.hasOwnProperty("suggestionsInputConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.verify(message.suggestionsInputConfig);
+                                var error = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.verify(message.suggestionsInputConfig, long + 1);
                                 if (error)
                                     return "suggestionsInputConfig." + error;
                             }
@@ -78840,7 +82221,7 @@
                                 if (!$util.isString(message.lastSuggestionsImportOperation))
                                     return "lastSuggestionsImportOperation: string expected";
                             if (message.denylistInputConfig != null && message.hasOwnProperty("denylistInputConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.verify(message.denylistInputConfig);
+                                var error = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.verify(message.denylistInputConfig, long + 1);
                                 if (error)
                                     return "denylistInputConfig." + error;
                             }
@@ -78848,7 +82229,7 @@
                                 if (!$util.isString(message.lastDenylistImportOperation))
                                     return "lastDenylistImportOperation: string expected";
                             if (message.allowlistInputConfig != null && message.hasOwnProperty("allowlistInputConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.verify(message.allowlistInputConfig);
+                                var error = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.verify(message.allowlistInputConfig, long + 1);
                                 if (error)
                                     return "allowlistInputConfig." + error;
                             }
@@ -78866,9 +82247,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CompletionConfig} CompletionConfig
                          */
-                        CompletionConfig.fromObject = function fromObject(object) {
+                        CompletionConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CompletionConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CompletionConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -78883,21 +82268,21 @@
                             if (object.suggestionsInputConfig != null) {
                                 if (typeof object.suggestionsInputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CompletionConfig.suggestionsInputConfig: object expected");
-                                message.suggestionsInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.fromObject(object.suggestionsInputConfig);
+                                message.suggestionsInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.fromObject(object.suggestionsInputConfig, long + 1);
                             }
                             if (object.lastSuggestionsImportOperation != null)
                                 message.lastSuggestionsImportOperation = String(object.lastSuggestionsImportOperation);
                             if (object.denylistInputConfig != null) {
                                 if (typeof object.denylistInputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CompletionConfig.denylistInputConfig: object expected");
-                                message.denylistInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.fromObject(object.denylistInputConfig);
+                                message.denylistInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.fromObject(object.denylistInputConfig, long + 1);
                             }
                             if (object.lastDenylistImportOperation != null)
                                 message.lastDenylistImportOperation = String(object.lastDenylistImportOperation);
                             if (object.allowlistInputConfig != null) {
                                 if (typeof object.allowlistInputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CompletionConfig.allowlistInputConfig: object expected");
-                                message.allowlistInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.fromObject(object.allowlistInputConfig);
+                                message.allowlistInputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.fromObject(object.allowlistInputConfig, long + 1);
                             }
                             if (object.lastAllowlistImportOperation != null)
                                 message.lastAllowlistImportOperation = String(object.lastAllowlistImportOperation);
@@ -79011,7 +82396,7 @@
                             this.feeds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -79128,9 +82513,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MerchantCenterLink.decode = function decode(reader, length, error) {
+                        MerchantCenterLink.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.MerchantCenterLink();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -79162,11 +82551,11 @@
                                 case 6: {
                                         if (!(message.feeds && message.feeds.length))
                                             message.feeds = [];
-                                        message.feeds.push($root.google.cloud.retail.v2alpha.MerchantCenterFeedFilter.decode(reader, reader.uint32()));
+                                        message.feeds.push($root.google.cloud.retail.v2alpha.MerchantCenterFeedFilter.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -79197,9 +82586,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MerchantCenterLink.verify = function verify(message) {
+                        MerchantCenterLink.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.merchantCenterAccountId != null && message.hasOwnProperty("merchantCenterAccountId"))
                                 if (!$util.isInteger(message.merchantCenterAccountId) && !(message.merchantCenterAccountId && $util.isInteger(message.merchantCenterAccountId.low) && $util.isInteger(message.merchantCenterAccountId.high)))
                                     return "merchantCenterAccountId: integer|Long expected";
@@ -79223,7 +82616,7 @@
                                 if (!Array.isArray(message.feeds))
                                     return "feeds: array expected";
                                 for (var i = 0; i < message.feeds.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.MerchantCenterFeedFilter.verify(message.feeds[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.MerchantCenterFeedFilter.verify(message.feeds[i], long + 1);
                                     if (error)
                                         return "feeds." + error;
                                 }
@@ -79239,9 +82632,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.MerchantCenterLink} MerchantCenterLink
                          */
-                        MerchantCenterLink.fromObject = function fromObject(object) {
+                        MerchantCenterLink.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.MerchantCenterLink)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.MerchantCenterLink();
                             if (object.merchantCenterAccountId != null)
                                 if ($util.Long)
@@ -79272,7 +82669,7 @@
                                 for (var i = 0; i < object.feeds.length; ++i) {
                                     if (typeof object.feeds[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.MerchantCenterLink.feeds: object expected");
-                                    message.feeds[i] = $root.google.cloud.retail.v2alpha.MerchantCenterFeedFilter.fromObject(object.feeds[i]);
+                                    message.feeds[i] = $root.google.cloud.retail.v2alpha.MerchantCenterFeedFilter.fromObject(object.feeds[i], long + 1);
                                 }
                             }
                             return message;
@@ -79380,7 +82777,7 @@
                         function MerchantCenterFeedFilter(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -79465,9 +82862,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MerchantCenterFeedFilter.decode = function decode(reader, length, error) {
+                        MerchantCenterFeedFilter.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.MerchantCenterFeedFilter();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -79487,7 +82888,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -79518,9 +82919,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MerchantCenterFeedFilter.verify = function verify(message) {
+                        MerchantCenterFeedFilter.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.primaryFeedId != null && message.hasOwnProperty("primaryFeedId"))
                                 if (!$util.isInteger(message.primaryFeedId) && !(message.primaryFeedId && $util.isInteger(message.primaryFeedId.low) && $util.isInteger(message.primaryFeedId.high)))
                                     return "primaryFeedId: integer|Long expected";
@@ -79541,9 +82946,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.MerchantCenterFeedFilter} MerchantCenterFeedFilter
                          */
-                        MerchantCenterFeedFilter.fromObject = function fromObject(object) {
+                        MerchantCenterFeedFilter.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.MerchantCenterFeedFilter)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.MerchantCenterFeedFilter();
                             if (object.primaryFeedId != null)
                                 if ($util.Long)
@@ -79659,7 +83068,7 @@
                             this.links = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -79725,9 +83134,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MerchantCenterLinkingConfig.decode = function decode(reader, length, error) {
+                        MerchantCenterLinkingConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.MerchantCenterLinkingConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -79737,11 +83150,11 @@
                                 case 1: {
                                         if (!(message.links && message.links.length))
                                             message.links = [];
-                                        message.links.push($root.google.cloud.retail.v2alpha.MerchantCenterLink.decode(reader, reader.uint32()));
+                                        message.links.push($root.google.cloud.retail.v2alpha.MerchantCenterLink.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -79772,14 +83185,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MerchantCenterLinkingConfig.verify = function verify(message) {
+                        MerchantCenterLinkingConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.links != null && message.hasOwnProperty("links")) {
                                 if (!Array.isArray(message.links))
                                     return "links: array expected";
                                 for (var i = 0; i < message.links.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.MerchantCenterLink.verify(message.links[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.MerchantCenterLink.verify(message.links[i], long + 1);
                                     if (error)
                                         return "links." + error;
                                 }
@@ -79795,9 +83212,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.MerchantCenterLinkingConfig} MerchantCenterLinkingConfig
                          */
-                        MerchantCenterLinkingConfig.fromObject = function fromObject(object) {
+                        MerchantCenterLinkingConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.MerchantCenterLinkingConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.MerchantCenterLinkingConfig();
                             if (object.links) {
                                 if (!Array.isArray(object.links))
@@ -79806,7 +83227,7 @@
                                 for (var i = 0; i < object.links.length; ++i) {
                                     if (typeof object.links[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.MerchantCenterLinkingConfig.links: object expected");
-                                    message.links[i] = $root.google.cloud.retail.v2alpha.MerchantCenterLink.fromObject(object.links[i]);
+                                    message.links[i] = $root.google.cloud.retail.v2alpha.MerchantCenterLink.fromObject(object.links[i], long + 1);
                                 }
                             }
                             return message;
@@ -79887,7 +83308,7 @@
                         function Catalog(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -79982,9 +83403,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Catalog.decode = function decode(reader, length, error) {
+                        Catalog.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Catalog();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -80000,15 +83425,15 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.productLevelConfig = $root.google.cloud.retail.v2alpha.ProductLevelConfig.decode(reader, reader.uint32());
+                                        message.productLevelConfig = $root.google.cloud.retail.v2alpha.ProductLevelConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.merchantCenterLinkingConfig = $root.google.cloud.retail.v2alpha.MerchantCenterLinkingConfig.decode(reader, reader.uint32());
+                                        message.merchantCenterLinkingConfig = $root.google.cloud.retail.v2alpha.MerchantCenterLinkingConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -80039,9 +83464,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Catalog.verify = function verify(message) {
+                        Catalog.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -80049,12 +83478,12 @@
                                 if (!$util.isString(message.displayName))
                                     return "displayName: string expected";
                             if (message.productLevelConfig != null && message.hasOwnProperty("productLevelConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ProductLevelConfig.verify(message.productLevelConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ProductLevelConfig.verify(message.productLevelConfig, long + 1);
                                 if (error)
                                     return "productLevelConfig." + error;
                             }
                             if (message.merchantCenterLinkingConfig != null && message.hasOwnProperty("merchantCenterLinkingConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.MerchantCenterLinkingConfig.verify(message.merchantCenterLinkingConfig);
+                                var error = $root.google.cloud.retail.v2alpha.MerchantCenterLinkingConfig.verify(message.merchantCenterLinkingConfig, long + 1);
                                 if (error)
                                     return "merchantCenterLinkingConfig." + error;
                             }
@@ -80069,9 +83498,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Catalog} Catalog
                          */
-                        Catalog.fromObject = function fromObject(object) {
+                        Catalog.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Catalog)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Catalog();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -80080,12 +83513,12 @@
                             if (object.productLevelConfig != null) {
                                 if (typeof object.productLevelConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Catalog.productLevelConfig: object expected");
-                                message.productLevelConfig = $root.google.cloud.retail.v2alpha.ProductLevelConfig.fromObject(object.productLevelConfig);
+                                message.productLevelConfig = $root.google.cloud.retail.v2alpha.ProductLevelConfig.fromObject(object.productLevelConfig, long + 1);
                             }
                             if (object.merchantCenterLinkingConfig != null) {
                                 if (typeof object.merchantCenterLinkingConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Catalog.merchantCenterLinkingConfig: object expected");
-                                message.merchantCenterLinkingConfig = $root.google.cloud.retail.v2alpha.MerchantCenterLinkingConfig.fromObject(object.merchantCenterLinkingConfig);
+                                message.merchantCenterLinkingConfig = $root.google.cloud.retail.v2alpha.MerchantCenterLinkingConfig.fromObject(object.merchantCenterLinkingConfig, long + 1);
                             }
                             return message;
                         };
@@ -80171,7 +83604,7 @@
                             this.inputUris = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -80247,9 +83680,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GcsSource.decode = function decode(reader, length, error) {
+                        GcsSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GcsSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -80267,7 +83704,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -80298,9 +83735,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GcsSource.verify = function verify(message) {
+                        GcsSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.inputUris != null && message.hasOwnProperty("inputUris")) {
                                 if (!Array.isArray(message.inputUris))
                                     return "inputUris: array expected";
@@ -80322,9 +83763,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GcsSource} GcsSource
                          */
-                        GcsSource.fromObject = function fromObject(object) {
+                        GcsSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GcsSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GcsSource();
                             if (object.inputUris) {
                                 if (!Array.isArray(object.inputUris))
@@ -80419,7 +83864,7 @@
                         function BigQuerySource(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -80548,9 +83993,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BigQuerySource.decode = function decode(reader, length, error) {
+                        BigQuerySource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.BigQuerySource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -80558,7 +84007,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 6: {
-                                        message.partitionDate = $root.google.type.Date.decode(reader, reader.uint32());
+                                        message.partitionDate = $root.google.type.Date.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -80582,7 +84031,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -80613,14 +84062,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BigQuerySource.verify = function verify(message) {
+                        BigQuerySource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.partitionDate != null && message.hasOwnProperty("partitionDate")) {
                                 properties.partition = 1;
                                 {
-                                    var error = $root.google.type.Date.verify(message.partitionDate);
+                                    var error = $root.google.type.Date.verify(message.partitionDate, long + 1);
                                     if (error)
                                         return "partitionDate." + error;
                                 }
@@ -80651,14 +84104,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.BigQuerySource} BigQuerySource
                          */
-                        BigQuerySource.fromObject = function fromObject(object) {
+                        BigQuerySource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.BigQuerySource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.BigQuerySource();
                             if (object.partitionDate != null) {
                                 if (typeof object.partitionDate !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.BigQuerySource.partitionDate: object expected");
-                                message.partitionDate = $root.google.type.Date.fromObject(object.partitionDate);
+                                message.partitionDate = $root.google.type.Date.fromObject(object.partitionDate, long + 1);
                             }
                             if (object.projectId != null)
                                 message.projectId = String(object.projectId);
@@ -80761,7 +84218,7 @@
                             this.products = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -80827,9 +84284,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductInlineSource.decode = function decode(reader, length, error) {
+                        ProductInlineSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ProductInlineSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -80839,11 +84300,11 @@
                                 case 1: {
                                         if (!(message.products && message.products.length))
                                             message.products = [];
-                                        message.products.push($root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32()));
+                                        message.products.push($root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -80874,14 +84335,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductInlineSource.verify = function verify(message) {
+                        ProductInlineSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.products != null && message.hasOwnProperty("products")) {
                                 if (!Array.isArray(message.products))
                                     return "products: array expected";
                                 for (var i = 0; i < message.products.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Product.verify(message.products[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Product.verify(message.products[i], long + 1);
                                     if (error)
                                         return "products." + error;
                                 }
@@ -80897,9 +84362,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ProductInlineSource} ProductInlineSource
                          */
-                        ProductInlineSource.fromObject = function fromObject(object) {
+                        ProductInlineSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ProductInlineSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ProductInlineSource();
                             if (object.products) {
                                 if (!Array.isArray(object.products))
@@ -80908,7 +84377,7 @@
                                 for (var i = 0; i < object.products.length; ++i) {
                                     if (typeof object.products[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ProductInlineSource.products: object expected");
-                                    message.products[i] = $root.google.cloud.retail.v2alpha.Product.fromObject(object.products[i]);
+                                    message.products[i] = $root.google.cloud.retail.v2alpha.Product.fromObject(object.products[i], long + 1);
                                 }
                             }
                             return message;
@@ -80987,7 +84456,7 @@
                             this.userEvents = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -81053,9 +84522,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEventInlineSource.decode = function decode(reader, length, error) {
+                        UserEventInlineSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UserEventInlineSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -81065,11 +84538,11 @@
                                 case 1: {
                                         if (!(message.userEvents && message.userEvents.length))
                                             message.userEvents = [];
-                                        message.userEvents.push($root.google.cloud.retail.v2alpha.UserEvent.decode(reader, reader.uint32()));
+                                        message.userEvents.push($root.google.cloud.retail.v2alpha.UserEvent.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -81100,14 +84573,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEventInlineSource.verify = function verify(message) {
+                        UserEventInlineSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.userEvents != null && message.hasOwnProperty("userEvents")) {
                                 if (!Array.isArray(message.userEvents))
                                     return "userEvents: array expected";
                                 for (var i = 0; i < message.userEvents.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.UserEvent.verify(message.userEvents[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.UserEvent.verify(message.userEvents[i], long + 1);
                                     if (error)
                                         return "userEvents." + error;
                                 }
@@ -81123,9 +84600,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UserEventInlineSource} UserEventInlineSource
                          */
-                        UserEventInlineSource.fromObject = function fromObject(object) {
+                        UserEventInlineSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UserEventInlineSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UserEventInlineSource();
                             if (object.userEvents) {
                                 if (!Array.isArray(object.userEvents))
@@ -81134,7 +84615,7 @@
                                 for (var i = 0; i < object.userEvents.length; ++i) {
                                     if (typeof object.userEvents[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.UserEventInlineSource.userEvents: object expected");
-                                    message.userEvents[i] = $root.google.cloud.retail.v2alpha.UserEvent.fromObject(object.userEvents[i]);
+                                    message.userEvents[i] = $root.google.cloud.retail.v2alpha.UserEvent.fromObject(object.userEvents[i], long + 1);
                                 }
                             }
                             return message;
@@ -81212,7 +84693,7 @@
                         function ImportErrorsConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -81291,9 +84772,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportErrorsConfig.decode = function decode(reader, length, error) {
+                        ImportErrorsConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ImportErrorsConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -81305,7 +84790,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -81336,9 +84821,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportErrorsConfig.verify = function verify(message) {
+                        ImportErrorsConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsPrefix != null && message.hasOwnProperty("gcsPrefix")) {
                                 properties.destination = 1;
@@ -81356,9 +84845,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ImportErrorsConfig} ImportErrorsConfig
                          */
-                        ImportErrorsConfig.fromObject = function fromObject(object) {
+                        ImportErrorsConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ImportErrorsConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ImportErrorsConfig();
                             if (object.gcsPrefix != null)
                                 message.gcsPrefix = String(object.gcsPrefix);
@@ -81442,7 +84935,7 @@
                         function ImportProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -81577,9 +85070,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportProductsRequest.decode = function decode(reader, length, error) {
+                        ImportProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ImportProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -81595,15 +85092,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.inputConfig = $root.google.cloud.retail.v2alpha.ProductInputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.retail.v2alpha.ProductInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -81619,7 +85116,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -81650,9 +85147,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportProductsRequest.verify = function verify(message) {
+                        ImportProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -81660,17 +85161,17 @@
                                 if (!$util.isString(message.requestId))
                                     return "requestId: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ProductInputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ProductInputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -81700,9 +85201,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ImportProductsRequest} ImportProductsRequest
                          */
-                        ImportProductsRequest.fromObject = function fromObject(object) {
+                        ImportProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ImportProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ImportProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -81711,17 +85216,17 @@
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportProductsRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.retail.v2alpha.ProductInputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.retail.v2alpha.ProductInputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportProductsRequest.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportProductsRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             switch (object.reconciliationMode) {
                             default:
@@ -81859,7 +85364,7 @@
                         function ImportUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -81944,9 +85449,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportUserEventsRequest.decode = function decode(reader, length, error) {
+                        ImportUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ImportUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -81958,15 +85467,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.inputConfig = $root.google.cloud.retail.v2alpha.UserEventInputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.retail.v2alpha.UserEventInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -81997,19 +85506,23 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportUserEventsRequest.verify = function verify(message) {
+                        ImportUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.UserEventInputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.retail.v2alpha.UserEventInputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
@@ -82024,21 +85537,25 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ImportUserEventsRequest} ImportUserEventsRequest
                          */
-                        ImportUserEventsRequest.fromObject = function fromObject(object) {
+                        ImportUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ImportUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ImportUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportUserEventsRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.retail.v2alpha.UserEventInputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.retail.v2alpha.UserEventInputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportUserEventsRequest.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             return message;
                         };
@@ -82121,7 +85638,7 @@
                         function ImportCompletionDataRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -82206,9 +85723,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportCompletionDataRequest.decode = function decode(reader, length, error) {
+                        ImportCompletionDataRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ImportCompletionDataRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -82220,7 +85741,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.inputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -82228,7 +85749,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -82259,14 +85780,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportCompletionDataRequest.verify = function verify(message) {
+                        ImportCompletionDataRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
@@ -82284,16 +85809,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ImportCompletionDataRequest} ImportCompletionDataRequest
                          */
-                        ImportCompletionDataRequest.fromObject = function fromObject(object) {
+                        ImportCompletionDataRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ImportCompletionDataRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ImportCompletionDataRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportCompletionDataRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.retail.v2alpha.CompletionDataInputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             if (object.notificationPubsubTopic != null)
                                 message.notificationPubsubTopic = String(object.notificationPubsubTopic);
@@ -82378,7 +85907,7 @@
                         function ProductInputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -82477,9 +86006,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductInputConfig.decode = function decode(reader, length, error) {
+                        ProductInputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ProductInputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -82487,19 +86020,19 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.productInlineSource = $root.google.cloud.retail.v2alpha.ProductInlineSource.decode(reader, reader.uint32());
+                                        message.productInlineSource = $root.google.cloud.retail.v2alpha.ProductInlineSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.gcsSource = $root.google.cloud.retail.v2alpha.GcsSource.decode(reader, reader.uint32());
+                                        message.gcsSource = $root.google.cloud.retail.v2alpha.GcsSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.decode(reader, reader.uint32());
+                                        message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -82530,14 +86063,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductInputConfig.verify = function verify(message) {
+                        ProductInputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.productInlineSource != null && message.hasOwnProperty("productInlineSource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.ProductInlineSource.verify(message.productInlineSource);
+                                    var error = $root.google.cloud.retail.v2alpha.ProductInlineSource.verify(message.productInlineSource, long + 1);
                                     if (error)
                                         return "productInlineSource." + error;
                                 }
@@ -82547,7 +86084,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.GcsSource.verify(message.gcsSource);
+                                    var error = $root.google.cloud.retail.v2alpha.GcsSource.verify(message.gcsSource, long + 1);
                                     if (error)
                                         return "gcsSource." + error;
                                 }
@@ -82557,7 +86094,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.BigQuerySource.verify(message.bigQuerySource);
+                                    var error = $root.google.cloud.retail.v2alpha.BigQuerySource.verify(message.bigQuerySource, long + 1);
                                     if (error)
                                         return "bigQuerySource." + error;
                                 }
@@ -82573,24 +86110,28 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ProductInputConfig} ProductInputConfig
                          */
-                        ProductInputConfig.fromObject = function fromObject(object) {
+                        ProductInputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ProductInputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ProductInputConfig();
                             if (object.productInlineSource != null) {
                                 if (typeof object.productInlineSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ProductInputConfig.productInlineSource: object expected");
-                                message.productInlineSource = $root.google.cloud.retail.v2alpha.ProductInlineSource.fromObject(object.productInlineSource);
+                                message.productInlineSource = $root.google.cloud.retail.v2alpha.ProductInlineSource.fromObject(object.productInlineSource, long + 1);
                             }
                             if (object.gcsSource != null) {
                                 if (typeof object.gcsSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ProductInputConfig.gcsSource: object expected");
-                                message.gcsSource = $root.google.cloud.retail.v2alpha.GcsSource.fromObject(object.gcsSource);
+                                message.gcsSource = $root.google.cloud.retail.v2alpha.GcsSource.fromObject(object.gcsSource, long + 1);
                             }
                             if (object.bigQuerySource != null) {
                                 if (typeof object.bigQuerySource !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ProductInputConfig.bigQuerySource: object expected");
-                                message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.fromObject(object.bigQuerySource);
+                                message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.fromObject(object.bigQuerySource, long + 1);
                             }
                             return message;
                         };
@@ -82677,7 +86218,7 @@
                         function UserEventInputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -82776,9 +86317,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEventInputConfig.decode = function decode(reader, length, error) {
+                        UserEventInputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UserEventInputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -82786,19 +86331,19 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.userEventInlineSource = $root.google.cloud.retail.v2alpha.UserEventInlineSource.decode(reader, reader.uint32());
+                                        message.userEventInlineSource = $root.google.cloud.retail.v2alpha.UserEventInlineSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.gcsSource = $root.google.cloud.retail.v2alpha.GcsSource.decode(reader, reader.uint32());
+                                        message.gcsSource = $root.google.cloud.retail.v2alpha.GcsSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.decode(reader, reader.uint32());
+                                        message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -82829,14 +86374,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEventInputConfig.verify = function verify(message) {
+                        UserEventInputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.userEventInlineSource != null && message.hasOwnProperty("userEventInlineSource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.UserEventInlineSource.verify(message.userEventInlineSource);
+                                    var error = $root.google.cloud.retail.v2alpha.UserEventInlineSource.verify(message.userEventInlineSource, long + 1);
                                     if (error)
                                         return "userEventInlineSource." + error;
                                 }
@@ -82846,7 +86395,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.GcsSource.verify(message.gcsSource);
+                                    var error = $root.google.cloud.retail.v2alpha.GcsSource.verify(message.gcsSource, long + 1);
                                     if (error)
                                         return "gcsSource." + error;
                                 }
@@ -82856,7 +86405,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.BigQuerySource.verify(message.bigQuerySource);
+                                    var error = $root.google.cloud.retail.v2alpha.BigQuerySource.verify(message.bigQuerySource, long + 1);
                                     if (error)
                                         return "bigQuerySource." + error;
                                 }
@@ -82872,24 +86421,28 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UserEventInputConfig} UserEventInputConfig
                          */
-                        UserEventInputConfig.fromObject = function fromObject(object) {
+                        UserEventInputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UserEventInputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UserEventInputConfig();
                             if (object.userEventInlineSource != null) {
                                 if (typeof object.userEventInlineSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UserEventInputConfig.userEventInlineSource: object expected");
-                                message.userEventInlineSource = $root.google.cloud.retail.v2alpha.UserEventInlineSource.fromObject(object.userEventInlineSource);
+                                message.userEventInlineSource = $root.google.cloud.retail.v2alpha.UserEventInlineSource.fromObject(object.userEventInlineSource, long + 1);
                             }
                             if (object.gcsSource != null) {
                                 if (typeof object.gcsSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UserEventInputConfig.gcsSource: object expected");
-                                message.gcsSource = $root.google.cloud.retail.v2alpha.GcsSource.fromObject(object.gcsSource);
+                                message.gcsSource = $root.google.cloud.retail.v2alpha.GcsSource.fromObject(object.gcsSource, long + 1);
                             }
                             if (object.bigQuerySource != null) {
                                 if (typeof object.bigQuerySource !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UserEventInputConfig.bigQuerySource: object expected");
-                                message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.fromObject(object.bigQuerySource);
+                                message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.fromObject(object.bigQuerySource, long + 1);
                             }
                             return message;
                         };
@@ -82974,7 +86527,7 @@
                         function CompletionDataInputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -83053,9 +86606,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompletionDataInputConfig.decode = function decode(reader, length, error) {
+                        CompletionDataInputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CompletionDataInputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -83063,11 +86620,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.decode(reader, reader.uint32());
+                                        message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -83098,14 +86655,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompletionDataInputConfig.verify = function verify(message) {
+                        CompletionDataInputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.bigQuerySource != null && message.hasOwnProperty("bigQuerySource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.BigQuerySource.verify(message.bigQuerySource);
+                                    var error = $root.google.cloud.retail.v2alpha.BigQuerySource.verify(message.bigQuerySource, long + 1);
                                     if (error)
                                         return "bigQuerySource." + error;
                                 }
@@ -83121,14 +86682,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CompletionDataInputConfig} CompletionDataInputConfig
                          */
-                        CompletionDataInputConfig.fromObject = function fromObject(object) {
+                        CompletionDataInputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CompletionDataInputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CompletionDataInputConfig();
                             if (object.bigQuerySource != null) {
                                 if (typeof object.bigQuerySource !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CompletionDataInputConfig.bigQuerySource: object expected");
-                                message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.fromObject(object.bigQuerySource);
+                                message.bigQuerySource = $root.google.cloud.retail.v2alpha.BigQuerySource.fromObject(object.bigQuerySource, long + 1);
                             }
                             return message;
                         };
@@ -83209,7 +86774,7 @@
                         function ImportMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -83334,9 +86899,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportMetadata.decode = function decode(reader, length, error) {
+                        ImportMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ImportMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -83344,11 +86913,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -83368,11 +86937,11 @@
                                         break;
                                     }
                                 case 7: {
-                                        message.transformedUserEventsMetadata = $root.google.cloud.retail.v2alpha.TransformedUserEventsMetadata.decode(reader, reader.uint32());
+                                        message.transformedUserEventsMetadata = $root.google.cloud.retail.v2alpha.TransformedUserEventsMetadata.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -83403,16 +86972,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportMetadata.verify = function verify(message) {
+                        ImportMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -83429,7 +87002,7 @@
                                 if (!$util.isString(message.notificationPubsubTopic))
                                     return "notificationPubsubTopic: string expected";
                             if (message.transformedUserEventsMetadata != null && message.hasOwnProperty("transformedUserEventsMetadata")) {
-                                var error = $root.google.cloud.retail.v2alpha.TransformedUserEventsMetadata.verify(message.transformedUserEventsMetadata);
+                                var error = $root.google.cloud.retail.v2alpha.TransformedUserEventsMetadata.verify(message.transformedUserEventsMetadata, long + 1);
                                 if (error)
                                     return "transformedUserEventsMetadata." + error;
                             }
@@ -83444,19 +87017,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ImportMetadata} ImportMetadata
                          */
-                        ImportMetadata.fromObject = function fromObject(object) {
+                        ImportMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ImportMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ImportMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportMetadata.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.successCount != null)
                                 if ($util.Long)
@@ -83483,7 +87060,7 @@
                             if (object.transformedUserEventsMetadata != null) {
                                 if (typeof object.transformedUserEventsMetadata !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportMetadata.transformedUserEventsMetadata: object expected");
-                                message.transformedUserEventsMetadata = $root.google.cloud.retail.v2alpha.TransformedUserEventsMetadata.fromObject(object.transformedUserEventsMetadata);
+                                message.transformedUserEventsMetadata = $root.google.cloud.retail.v2alpha.TransformedUserEventsMetadata.fromObject(object.transformedUserEventsMetadata, long + 1);
                             }
                             return message;
                         };
@@ -83591,7 +87168,7 @@
                         function TransformedUserEventsMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -83666,9 +87243,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TransformedUserEventsMetadata.decode = function decode(reader, length, error) {
+                        TransformedUserEventsMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.TransformedUserEventsMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -83684,7 +87265,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -83715,9 +87296,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TransformedUserEventsMetadata.verify = function verify(message) {
+                        TransformedUserEventsMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.sourceEventsCount != null && message.hasOwnProperty("sourceEventsCount"))
                                 if (!$util.isInteger(message.sourceEventsCount) && !(message.sourceEventsCount && $util.isInteger(message.sourceEventsCount.low) && $util.isInteger(message.sourceEventsCount.high)))
                                     return "sourceEventsCount: integer|Long expected";
@@ -83735,9 +87320,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.TransformedUserEventsMetadata} TransformedUserEventsMetadata
                          */
-                        TransformedUserEventsMetadata.fromObject = function fromObject(object) {
+                        TransformedUserEventsMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.TransformedUserEventsMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.TransformedUserEventsMetadata();
                             if (object.sourceEventsCount != null)
                                 if ($util.Long)
@@ -83849,7 +87438,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -83925,9 +87514,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportProductsResponse.decode = function decode(reader, length, error) {
+                        ImportProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ImportProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -83937,15 +87530,15 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -83976,20 +87569,24 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportProductsResponse.verify = function verify(message) {
+                        ImportProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
@@ -84004,9 +87601,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ImportProductsResponse} ImportProductsResponse
                          */
-                        ImportProductsResponse.fromObject = function fromObject(object) {
+                        ImportProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ImportProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ImportProductsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -84015,13 +87616,13 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ImportProductsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportProductsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             return message;
                         };
@@ -84105,7 +87706,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -84191,9 +87792,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportUserEventsResponse.decode = function decode(reader, length, error) {
+                        ImportUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ImportUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -84203,19 +87808,19 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.importSummary = $root.google.cloud.retail.v2alpha.UserEventImportSummary.decode(reader, reader.uint32());
+                                        message.importSummary = $root.google.cloud.retail.v2alpha.UserEventImportSummary.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -84246,25 +87851,29 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportUserEventsResponse.verify = function verify(message) {
+                        ImportUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.importSummary != null && message.hasOwnProperty("importSummary")) {
-                                var error = $root.google.cloud.retail.v2alpha.UserEventImportSummary.verify(message.importSummary);
+                                var error = $root.google.cloud.retail.v2alpha.UserEventImportSummary.verify(message.importSummary, long + 1);
                                 if (error)
                                     return "importSummary." + error;
                             }
@@ -84279,9 +87888,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ImportUserEventsResponse} ImportUserEventsResponse
                          */
-                        ImportUserEventsResponse.fromObject = function fromObject(object) {
+                        ImportUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ImportUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ImportUserEventsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -84290,18 +87903,18 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ImportUserEventsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportUserEventsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2alpha.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.importSummary != null) {
                                 if (typeof object.importSummary !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ImportUserEventsResponse.importSummary: object expected");
-                                message.importSummary = $root.google.cloud.retail.v2alpha.UserEventImportSummary.fromObject(object.importSummary);
+                                message.importSummary = $root.google.cloud.retail.v2alpha.UserEventImportSummary.fromObject(object.importSummary, long + 1);
                             }
                             return message;
                         };
@@ -84387,7 +88000,7 @@
                         function UserEventImportSummary(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -84462,9 +88075,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEventImportSummary.decode = function decode(reader, length, error) {
+                        UserEventImportSummary.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UserEventImportSummary();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -84480,7 +88097,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -84511,9 +88128,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEventImportSummary.verify = function verify(message) {
+                        UserEventImportSummary.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.joinedEventsCount != null && message.hasOwnProperty("joinedEventsCount"))
                                 if (!$util.isInteger(message.joinedEventsCount) && !(message.joinedEventsCount && $util.isInteger(message.joinedEventsCount.low) && $util.isInteger(message.joinedEventsCount.high)))
                                     return "joinedEventsCount: integer|Long expected";
@@ -84531,9 +88152,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UserEventImportSummary} UserEventImportSummary
                          */
-                        UserEventImportSummary.fromObject = function fromObject(object) {
+                        UserEventImportSummary.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UserEventImportSummary)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UserEventImportSummary();
                             if (object.joinedEventsCount != null)
                                 if ($util.Long)
@@ -84644,7 +88269,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -84710,9 +88335,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportCompletionDataResponse.decode = function decode(reader, length, error) {
+                        ImportCompletionDataResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ImportCompletionDataResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -84722,11 +88351,11 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -84757,14 +88386,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportCompletionDataResponse.verify = function verify(message) {
+                        ImportCompletionDataResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
@@ -84780,9 +88413,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ImportCompletionDataResponse} ImportCompletionDataResponse
                          */
-                        ImportCompletionDataResponse.fromObject = function fromObject(object) {
+                        ImportCompletionDataResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ImportCompletionDataResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ImportCompletionDataResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -84791,7 +88428,7 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ImportCompletionDataResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             return message;
@@ -84893,7 +88530,7 @@
                             this.pageCategories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -85164,9 +88801,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEvent.decode = function decode(reader, length, error) {
+                        UserEvent.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UserEvent(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -85186,7 +88827,7 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.eventTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.eventTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
@@ -85202,11 +88843,11 @@
                                 case 6: {
                                         if (!(message.productDetails && message.productDetails.length))
                                             message.productDetails = [];
-                                        message.productDetails.push($root.google.cloud.retail.v2alpha.ProductDetail.decode(reader, reader.uint32()));
+                                        message.productDetails.push($root.google.cloud.retail.v2alpha.ProductDetail.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 22: {
-                                        message.completionDetail = $root.google.cloud.retail.v2alpha.CompletionDetail.decode(reader, reader.uint32());
+                                        message.completionDetail = $root.google.cloud.retail.v2alpha.CompletionDetail.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -85222,13 +88863,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2alpha.CustomAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2alpha.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributes, key);
                                         message.attributes[key] = value;
                                         break;
                                     }
@@ -85237,7 +88880,7 @@
                                         break;
                                     }
                                 case 9: {
-                                        message.purchaseTransaction = $root.google.cloud.retail.v2alpha.PurchaseTransaction.decode(reader, reader.uint32());
+                                        message.purchaseTransaction = $root.google.cloud.retail.v2alpha.PurchaseTransaction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -85263,7 +88906,7 @@
                                         break;
                                     }
                                 case 12: {
-                                        message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.decode(reader, reader.uint32());
+                                        message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
@@ -85283,7 +88926,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -85314,9 +88957,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEvent.verify = function verify(message) {
+                        UserEvent.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.eventType != null && message.hasOwnProperty("eventType"))
                                 if (!$util.isString(message.eventType))
                                     return "eventType: string expected";
@@ -85327,7 +88974,7 @@
                                 if (!$util.isString(message.sessionId))
                                     return "sessionId: string expected";
                             if (message.eventTime != null && message.hasOwnProperty("eventTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.eventTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.eventTime, long + 1);
                                 if (error)
                                     return "eventTime." + error;
                             }
@@ -85345,13 +88992,13 @@
                                 if (!Array.isArray(message.productDetails))
                                     return "productDetails: array expected";
                                 for (var i = 0; i < message.productDetails.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.ProductDetail.verify(message.productDetails[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.ProductDetail.verify(message.productDetails[i], long + 1);
                                     if (error)
                                         return "productDetails." + error;
                                 }
                             }
                             if (message.completionDetail != null && message.hasOwnProperty("completionDetail")) {
-                                var error = $root.google.cloud.retail.v2alpha.CompletionDetail.verify(message.completionDetail);
+                                var error = $root.google.cloud.retail.v2alpha.CompletionDetail.verify(message.completionDetail, long + 1);
                                 if (error)
                                     return "completionDetail." + error;
                             }
@@ -85360,7 +89007,7 @@
                                     return "attributes: object expected";
                                 var key = Object.keys(message.attributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.CustomAttribute.verify(message.attributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2alpha.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                     if (error)
                                         return "attributes." + error;
                                 }
@@ -85369,7 +89016,7 @@
                                 if (!$util.isString(message.cartId))
                                     return "cartId: string expected";
                             if (message.purchaseTransaction != null && message.hasOwnProperty("purchaseTransaction")) {
-                                var error = $root.google.cloud.retail.v2alpha.PurchaseTransaction.verify(message.purchaseTransaction);
+                                var error = $root.google.cloud.retail.v2alpha.PurchaseTransaction.verify(message.purchaseTransaction, long + 1);
                                 if (error)
                                     return "purchaseTransaction." + error;
                             }
@@ -85393,7 +89040,7 @@
                                         return "pageCategories: string[] expected";
                             }
                             if (message.userInfo != null && message.hasOwnProperty("userInfo")) {
-                                var error = $root.google.cloud.retail.v2alpha.UserInfo.verify(message.userInfo);
+                                var error = $root.google.cloud.retail.v2alpha.UserInfo.verify(message.userInfo, long + 1);
                                 if (error)
                                     return "userInfo." + error;
                             }
@@ -85420,9 +89067,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UserEvent} UserEvent
                          */
-                        UserEvent.fromObject = function fromObject(object) {
+                        UserEvent.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UserEvent)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UserEvent();
                             if (object.eventType != null)
                                 message.eventType = String(object.eventType);
@@ -85433,7 +89084,7 @@
                             if (object.eventTime != null) {
                                 if (typeof object.eventTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UserEvent.eventTime: object expected");
-                                message.eventTime = $root.google.protobuf.Timestamp.fromObject(object.eventTime);
+                                message.eventTime = $root.google.protobuf.Timestamp.fromObject(object.eventTime, long + 1);
                             }
                             if (object.experimentIds) {
                                 if (!Array.isArray(object.experimentIds))
@@ -85451,22 +89102,24 @@
                                 for (var i = 0; i < object.productDetails.length; ++i) {
                                     if (typeof object.productDetails[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.UserEvent.productDetails: object expected");
-                                    message.productDetails[i] = $root.google.cloud.retail.v2alpha.ProductDetail.fromObject(object.productDetails[i]);
+                                    message.productDetails[i] = $root.google.cloud.retail.v2alpha.ProductDetail.fromObject(object.productDetails[i], long + 1);
                                 }
                             }
                             if (object.completionDetail != null) {
                                 if (typeof object.completionDetail !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UserEvent.completionDetail: object expected");
-                                message.completionDetail = $root.google.cloud.retail.v2alpha.CompletionDetail.fromObject(object.completionDetail);
+                                message.completionDetail = $root.google.cloud.retail.v2alpha.CompletionDetail.fromObject(object.completionDetail, long + 1);
                             }
                             if (object.attributes) {
                                 if (typeof object.attributes !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UserEvent.attributes: object expected");
                                 message.attributes = {};
                                 for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributes, keys[i]);
                                     if (typeof object.attributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.UserEvent.attributes: object expected");
-                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2alpha.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2alpha.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                 }
                             }
                             if (object.cartId != null)
@@ -85474,7 +89127,7 @@
                             if (object.purchaseTransaction != null) {
                                 if (typeof object.purchaseTransaction !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UserEvent.purchaseTransaction: object expected");
-                                message.purchaseTransaction = $root.google.cloud.retail.v2alpha.PurchaseTransaction.fromObject(object.purchaseTransaction);
+                                message.purchaseTransaction = $root.google.cloud.retail.v2alpha.PurchaseTransaction.fromObject(object.purchaseTransaction, long + 1);
                             }
                             if (object.searchQuery != null)
                                 message.searchQuery = String(object.searchQuery);
@@ -85494,7 +89147,7 @@
                             if (object.userInfo != null) {
                                 if (typeof object.userInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UserEvent.userInfo: object expected");
-                                message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.fromObject(object.userInfo);
+                                message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.fromObject(object.userInfo, long + 1);
                             }
                             if (object.uri != null)
                                 message.uri = String(object.uri);
@@ -85567,8 +89220,11 @@
                             var keys2;
                             if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                 object.attributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributes, keys2[j]);
                                     object.attributes[keys2[j]] = $root.google.cloud.retail.v2alpha.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                }
                             }
                             if (message.cartId != null && message.hasOwnProperty("cartId"))
                                 object.cartId = message.cartId;
@@ -85654,7 +89310,7 @@
                         function ProductDetail(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -85729,9 +89385,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductDetail.decode = function decode(reader, length, error) {
+                        ProductDetail.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ProductDetail();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -85739,15 +89399,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.product = $root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32());
+                                        message.product = $root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.quantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32());
+                                        message.quantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -85778,16 +89438,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductDetail.verify = function verify(message) {
+                        ProductDetail.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product")) {
-                                var error = $root.google.cloud.retail.v2alpha.Product.verify(message.product);
+                                var error = $root.google.cloud.retail.v2alpha.Product.verify(message.product, long + 1);
                                 if (error)
                                     return "product." + error;
                             }
                             if (message.quantity != null && message.hasOwnProperty("quantity")) {
-                                var error = $root.google.protobuf.Int32Value.verify(message.quantity);
+                                var error = $root.google.protobuf.Int32Value.verify(message.quantity, long + 1);
                                 if (error)
                                     return "quantity." + error;
                             }
@@ -85802,19 +89466,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ProductDetail} ProductDetail
                          */
-                        ProductDetail.fromObject = function fromObject(object) {
+                        ProductDetail.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ProductDetail)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ProductDetail();
                             if (object.product != null) {
                                 if (typeof object.product !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ProductDetail.product: object expected");
-                                message.product = $root.google.cloud.retail.v2alpha.Product.fromObject(object.product);
+                                message.product = $root.google.cloud.retail.v2alpha.Product.fromObject(object.product, long + 1);
                             }
                             if (object.quantity != null) {
                                 if (typeof object.quantity !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ProductDetail.quantity: object expected");
-                                message.quantity = $root.google.protobuf.Int32Value.fromObject(object.quantity);
+                                message.quantity = $root.google.protobuf.Int32Value.fromObject(object.quantity, long + 1);
                             }
                             return message;
                         };
@@ -85894,7 +89562,7 @@
                         function CompletionDetail(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -85979,9 +89647,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompletionDetail.decode = function decode(reader, length, error) {
+                        CompletionDetail.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CompletionDetail();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -86001,7 +89673,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -86032,9 +89704,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompletionDetail.verify = function verify(message) {
+                        CompletionDetail.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.completionAttributionToken != null && message.hasOwnProperty("completionAttributionToken"))
                                 if (!$util.isString(message.completionAttributionToken))
                                     return "completionAttributionToken: string expected";
@@ -86055,9 +89731,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CompletionDetail} CompletionDetail
                          */
-                        CompletionDetail.fromObject = function fromObject(object) {
+                        CompletionDetail.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CompletionDetail)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CompletionDetail();
                             if (object.completionAttributionToken != null)
                                 message.completionAttributionToken = String(object.completionAttributionToken);
@@ -86148,7 +89828,7 @@
                         function PurchaseTransaction(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -86253,9 +89933,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurchaseTransaction.decode = function decode(reader, length, error) {
+                        PurchaseTransaction.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PurchaseTransaction();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -86283,7 +89967,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -86314,9 +89998,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurchaseTransaction.verify = function verify(message) {
+                        PurchaseTransaction.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.id != null && message.hasOwnProperty("id"))
                                 if (!$util.isString(message.id))
                                     return "id: string expected";
@@ -86343,9 +90031,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PurchaseTransaction} PurchaseTransaction
                          */
-                        PurchaseTransaction.fromObject = function fromObject(object) {
+                        PurchaseTransaction.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PurchaseTransaction)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PurchaseTransaction();
                             if (object.id != null)
                                 message.id = String(object.id);
@@ -86875,7 +90567,7 @@
                         function ListCatalogsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -86960,9 +90652,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListCatalogsRequest.decode = function decode(reader, length, error) {
+                        ListCatalogsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListCatalogsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -86982,7 +90678,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -87013,9 +90709,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListCatalogsRequest.verify = function verify(message) {
+                        ListCatalogsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -87036,9 +90736,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListCatalogsRequest} ListCatalogsRequest
                          */
-                        ListCatalogsRequest.fromObject = function fromObject(object) {
+                        ListCatalogsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListCatalogsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListCatalogsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -87127,7 +90831,7 @@
                             this.catalogs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -87203,9 +90907,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListCatalogsResponse.decode = function decode(reader, length, error) {
+                        ListCatalogsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListCatalogsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -87215,7 +90923,7 @@
                                 case 1: {
                                         if (!(message.catalogs && message.catalogs.length))
                                             message.catalogs = [];
-                                        message.catalogs.push($root.google.cloud.retail.v2alpha.Catalog.decode(reader, reader.uint32()));
+                                        message.catalogs.push($root.google.cloud.retail.v2alpha.Catalog.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -87223,7 +90931,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -87254,14 +90962,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListCatalogsResponse.verify = function verify(message) {
+                        ListCatalogsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalogs != null && message.hasOwnProperty("catalogs")) {
                                 if (!Array.isArray(message.catalogs))
                                     return "catalogs: array expected";
                                 for (var i = 0; i < message.catalogs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Catalog.verify(message.catalogs[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Catalog.verify(message.catalogs[i], long + 1);
                                     if (error)
                                         return "catalogs." + error;
                                 }
@@ -87280,9 +90992,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListCatalogsResponse} ListCatalogsResponse
                          */
-                        ListCatalogsResponse.fromObject = function fromObject(object) {
+                        ListCatalogsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListCatalogsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListCatalogsResponse();
                             if (object.catalogs) {
                                 if (!Array.isArray(object.catalogs))
@@ -87291,7 +91007,7 @@
                                 for (var i = 0; i < object.catalogs.length; ++i) {
                                     if (typeof object.catalogs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ListCatalogsResponse.catalogs: object expected");
-                                    message.catalogs[i] = $root.google.cloud.retail.v2alpha.Catalog.fromObject(object.catalogs[i]);
+                                    message.catalogs[i] = $root.google.cloud.retail.v2alpha.Catalog.fromObject(object.catalogs[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -87376,7 +91092,7 @@
                         function UpdateCatalogRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -87451,9 +91167,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateCatalogRequest.decode = function decode(reader, length, error) {
+                        UpdateCatalogRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateCatalogRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -87461,15 +91181,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.catalog = $root.google.cloud.retail.v2alpha.Catalog.decode(reader, reader.uint32());
+                                        message.catalog = $root.google.cloud.retail.v2alpha.Catalog.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -87500,16 +91220,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateCatalogRequest.verify = function verify(message) {
+                        UpdateCatalogRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog")) {
-                                var error = $root.google.cloud.retail.v2alpha.Catalog.verify(message.catalog);
+                                var error = $root.google.cloud.retail.v2alpha.Catalog.verify(message.catalog, long + 1);
                                 if (error)
                                     return "catalog." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -87524,19 +91248,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateCatalogRequest} UpdateCatalogRequest
                          */
-                        UpdateCatalogRequest.fromObject = function fromObject(object) {
+                        UpdateCatalogRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateCatalogRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateCatalogRequest();
                             if (object.catalog != null) {
                                 if (typeof object.catalog !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateCatalogRequest.catalog: object expected");
-                                message.catalog = $root.google.cloud.retail.v2alpha.Catalog.fromObject(object.catalog);
+                                message.catalog = $root.google.cloud.retail.v2alpha.Catalog.fromObject(object.catalog, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateCatalogRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -87617,7 +91345,7 @@
                         function SetDefaultBranchRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -87712,9 +91440,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetDefaultBranchRequest.decode = function decode(reader, length, error) {
+                        SetDefaultBranchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SetDefaultBranchRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -87738,7 +91470,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -87769,9 +91501,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetDefaultBranchRequest.verify = function verify(message) {
+                        SetDefaultBranchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -87795,9 +91531,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.SetDefaultBranchRequest} SetDefaultBranchRequest
                          */
-                        SetDefaultBranchRequest.fromObject = function fromObject(object) {
+                        SetDefaultBranchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.SetDefaultBranchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.SetDefaultBranchRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -87889,7 +91629,7 @@
                         function GetDefaultBranchRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -87954,9 +91694,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetDefaultBranchRequest.decode = function decode(reader, length, error) {
+                        GetDefaultBranchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetDefaultBranchRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -87968,7 +91712,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -87999,9 +91743,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetDefaultBranchRequest.verify = function verify(message) {
+                        GetDefaultBranchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -88016,9 +91764,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetDefaultBranchRequest} GetDefaultBranchRequest
                          */
-                        GetDefaultBranchRequest.fromObject = function fromObject(object) {
+                        GetDefaultBranchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetDefaultBranchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetDefaultBranchRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -88096,7 +91848,7 @@
                         function GetDefaultBranchResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -88181,9 +91933,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetDefaultBranchResponse.decode = function decode(reader, length, error) {
+                        GetDefaultBranchResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetDefaultBranchResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -88195,7 +91951,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -88203,7 +91959,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -88234,14 +91990,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetDefaultBranchResponse.verify = function verify(message) {
+                        GetDefaultBranchResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.branch != null && message.hasOwnProperty("branch"))
                                 if (!$util.isString(message.branch))
                                     return "branch: string expected";
                             if (message.setTime != null && message.hasOwnProperty("setTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.setTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.setTime, long + 1);
                                 if (error)
                                     return "setTime." + error;
                             }
@@ -88259,16 +92019,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetDefaultBranchResponse} GetDefaultBranchResponse
                          */
-                        GetDefaultBranchResponse.fromObject = function fromObject(object) {
+                        GetDefaultBranchResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetDefaultBranchResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetDefaultBranchResponse();
                             if (object.branch != null)
                                 message.branch = String(object.branch);
                             if (object.setTime != null) {
                                 if (typeof object.setTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.GetDefaultBranchResponse.setTime: object expected");
-                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime);
+                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime, long + 1);
                             }
                             if (object.note != null)
                                 message.note = String(object.note);
@@ -88351,7 +92115,7 @@
                         function GetCompletionConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -88416,9 +92180,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetCompletionConfigRequest.decode = function decode(reader, length, error) {
+                        GetCompletionConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetCompletionConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -88430,7 +92198,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -88461,9 +92229,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetCompletionConfigRequest.verify = function verify(message) {
+                        GetCompletionConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -88478,9 +92250,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetCompletionConfigRequest} GetCompletionConfigRequest
                          */
-                        GetCompletionConfigRequest.fromObject = function fromObject(object) {
+                        GetCompletionConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetCompletionConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetCompletionConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -88557,7 +92333,7 @@
                         function UpdateCompletionConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -88632,9 +92408,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateCompletionConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateCompletionConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateCompletionConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -88642,15 +92422,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.completionConfig = $root.google.cloud.retail.v2alpha.CompletionConfig.decode(reader, reader.uint32());
+                                        message.completionConfig = $root.google.cloud.retail.v2alpha.CompletionConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -88681,16 +92461,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateCompletionConfigRequest.verify = function verify(message) {
+                        UpdateCompletionConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.completionConfig != null && message.hasOwnProperty("completionConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.CompletionConfig.verify(message.completionConfig);
+                                var error = $root.google.cloud.retail.v2alpha.CompletionConfig.verify(message.completionConfig, long + 1);
                                 if (error)
                                     return "completionConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -88705,19 +92489,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateCompletionConfigRequest} UpdateCompletionConfigRequest
                          */
-                        UpdateCompletionConfigRequest.fromObject = function fromObject(object) {
+                        UpdateCompletionConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateCompletionConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateCompletionConfigRequest();
                             if (object.completionConfig != null) {
                                 if (typeof object.completionConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateCompletionConfigRequest.completionConfig: object expected");
-                                message.completionConfig = $root.google.cloud.retail.v2alpha.CompletionConfig.fromObject(object.completionConfig);
+                                message.completionConfig = $root.google.cloud.retail.v2alpha.CompletionConfig.fromObject(object.completionConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateCompletionConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -88795,7 +92583,7 @@
                         function GetAttributesConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -88860,9 +92648,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetAttributesConfigRequest.decode = function decode(reader, length, error) {
+                        GetAttributesConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetAttributesConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -88874,7 +92666,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -88905,9 +92697,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetAttributesConfigRequest.verify = function verify(message) {
+                        GetAttributesConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -88922,9 +92718,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetAttributesConfigRequest} GetAttributesConfigRequest
                          */
-                        GetAttributesConfigRequest.fromObject = function fromObject(object) {
+                        GetAttributesConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetAttributesConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetAttributesConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -89001,7 +92801,7 @@
                         function UpdateAttributesConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -89076,9 +92876,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateAttributesConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateAttributesConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateAttributesConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -89086,15 +92890,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.attributesConfig = $root.google.cloud.retail.v2alpha.AttributesConfig.decode(reader, reader.uint32());
+                                        message.attributesConfig = $root.google.cloud.retail.v2alpha.AttributesConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -89125,16 +92929,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateAttributesConfigRequest.verify = function verify(message) {
+                        UpdateAttributesConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.AttributesConfig.verify(message.attributesConfig);
+                                var error = $root.google.cloud.retail.v2alpha.AttributesConfig.verify(message.attributesConfig, long + 1);
                                 if (error)
                                     return "attributesConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -89149,19 +92957,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateAttributesConfigRequest} UpdateAttributesConfigRequest
                          */
-                        UpdateAttributesConfigRequest.fromObject = function fromObject(object) {
+                        UpdateAttributesConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateAttributesConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateAttributesConfigRequest();
                             if (object.attributesConfig != null) {
                                 if (typeof object.attributesConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateAttributesConfigRequest.attributesConfig: object expected");
-                                message.attributesConfig = $root.google.cloud.retail.v2alpha.AttributesConfig.fromObject(object.attributesConfig);
+                                message.attributesConfig = $root.google.cloud.retail.v2alpha.AttributesConfig.fromObject(object.attributesConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateAttributesConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -89240,7 +93052,7 @@
                         function AddCatalogAttributeRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -89315,9 +93127,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddCatalogAttributeRequest.decode = function decode(reader, length, error) {
+                        AddCatalogAttributeRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AddCatalogAttributeRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -89329,11 +93145,11 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.catalogAttribute = $root.google.cloud.retail.v2alpha.CatalogAttribute.decode(reader, reader.uint32());
+                                        message.catalogAttribute = $root.google.cloud.retail.v2alpha.CatalogAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -89364,14 +93180,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddCatalogAttributeRequest.verify = function verify(message) {
+                        AddCatalogAttributeRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
                             if (message.catalogAttribute != null && message.hasOwnProperty("catalogAttribute")) {
-                                var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.verify(message.catalogAttribute);
+                                var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.verify(message.catalogAttribute, long + 1);
                                 if (error)
                                     return "catalogAttribute." + error;
                             }
@@ -89386,16 +93206,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AddCatalogAttributeRequest} AddCatalogAttributeRequest
                          */
-                        AddCatalogAttributeRequest.fromObject = function fromObject(object) {
+                        AddCatalogAttributeRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AddCatalogAttributeRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.AddCatalogAttributeRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
                             if (object.catalogAttribute != null) {
                                 if (typeof object.catalogAttribute !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.AddCatalogAttributeRequest.catalogAttribute: object expected");
-                                message.catalogAttribute = $root.google.cloud.retail.v2alpha.CatalogAttribute.fromObject(object.catalogAttribute);
+                                message.catalogAttribute = $root.google.cloud.retail.v2alpha.CatalogAttribute.fromObject(object.catalogAttribute, long + 1);
                             }
                             return message;
                         };
@@ -89474,7 +93298,7 @@
                         function RemoveCatalogAttributeRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -89549,9 +93373,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveCatalogAttributeRequest.decode = function decode(reader, length, error) {
+                        RemoveCatalogAttributeRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RemoveCatalogAttributeRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -89567,7 +93395,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -89598,9 +93426,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveCatalogAttributeRequest.verify = function verify(message) {
+                        RemoveCatalogAttributeRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
@@ -89618,9 +93450,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RemoveCatalogAttributeRequest} RemoveCatalogAttributeRequest
                          */
-                        RemoveCatalogAttributeRequest.fromObject = function fromObject(object) {
+                        RemoveCatalogAttributeRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RemoveCatalogAttributeRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.RemoveCatalogAttributeRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
@@ -89704,7 +93540,7 @@
                             this.attributeKeys = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -89780,9 +93616,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BatchRemoveCatalogAttributesRequest.decode = function decode(reader, length, error) {
+                        BatchRemoveCatalogAttributesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.BatchRemoveCatalogAttributesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -89800,7 +93640,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -89831,9 +93671,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BatchRemoveCatalogAttributesRequest.verify = function verify(message) {
+                        BatchRemoveCatalogAttributesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
@@ -89855,9 +93699,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.BatchRemoveCatalogAttributesRequest} BatchRemoveCatalogAttributesRequest
                          */
-                        BatchRemoveCatalogAttributesRequest.fromObject = function fromObject(object) {
+                        BatchRemoveCatalogAttributesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.BatchRemoveCatalogAttributesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.BatchRemoveCatalogAttributesRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
@@ -89950,7 +93798,7 @@
                             this.resetCatalogAttributes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -90027,9 +93875,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BatchRemoveCatalogAttributesResponse.decode = function decode(reader, length, error) {
+                        BatchRemoveCatalogAttributesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.BatchRemoveCatalogAttributesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -90049,7 +93901,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -90080,9 +93932,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BatchRemoveCatalogAttributesResponse.verify = function verify(message) {
+                        BatchRemoveCatalogAttributesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.deletedCatalogAttributes != null && message.hasOwnProperty("deletedCatalogAttributes")) {
                                 if (!Array.isArray(message.deletedCatalogAttributes))
                                     return "deletedCatalogAttributes: array expected";
@@ -90108,9 +93964,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.BatchRemoveCatalogAttributesResponse} BatchRemoveCatalogAttributesResponse
                          */
-                        BatchRemoveCatalogAttributesResponse.fromObject = function fromObject(object) {
+                        BatchRemoveCatalogAttributesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.BatchRemoveCatalogAttributesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.BatchRemoveCatalogAttributesResponse();
                             if (object.deletedCatalogAttributes) {
                                 if (!Array.isArray(object.deletedCatalogAttributes))
@@ -90210,7 +94070,7 @@
                         function ReplaceCatalogAttributeRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -90295,9 +94155,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ReplaceCatalogAttributeRequest.decode = function decode(reader, length, error) {
+                        ReplaceCatalogAttributeRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ReplaceCatalogAttributeRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -90309,15 +94173,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.catalogAttribute = $root.google.cloud.retail.v2alpha.CatalogAttribute.decode(reader, reader.uint32());
+                                        message.catalogAttribute = $root.google.cloud.retail.v2alpha.CatalogAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -90348,19 +94212,23 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ReplaceCatalogAttributeRequest.verify = function verify(message) {
+                        ReplaceCatalogAttributeRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
                             if (message.catalogAttribute != null && message.hasOwnProperty("catalogAttribute")) {
-                                var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.verify(message.catalogAttribute);
+                                var error = $root.google.cloud.retail.v2alpha.CatalogAttribute.verify(message.catalogAttribute, long + 1);
                                 if (error)
                                     return "catalogAttribute." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -90375,21 +94243,25 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ReplaceCatalogAttributeRequest} ReplaceCatalogAttributeRequest
                          */
-                        ReplaceCatalogAttributeRequest.fromObject = function fromObject(object) {
+                        ReplaceCatalogAttributeRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ReplaceCatalogAttributeRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ReplaceCatalogAttributeRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
                             if (object.catalogAttribute != null) {
                                 if (typeof object.catalogAttribute !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ReplaceCatalogAttributeRequest.catalogAttribute: object expected");
-                                message.catalogAttribute = $root.google.cloud.retail.v2alpha.CatalogAttribute.fromObject(object.catalogAttribute);
+                                message.catalogAttribute = $root.google.cloud.retail.v2alpha.CatalogAttribute.fromObject(object.catalogAttribute, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ReplaceCatalogAttributeRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -90580,7 +94452,7 @@
                             this.languageCodes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -90726,9 +94598,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompleteQueryRequest.decode = function decode(reader, length, error) {
+                        CompleteQueryRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CompleteQueryRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -90774,7 +94650,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -90805,9 +94681,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompleteQueryRequest.verify = function verify(message) {
+                        CompleteQueryRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -90850,9 +94730,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CompleteQueryRequest} CompleteQueryRequest
                          */
-                        CompleteQueryRequest.fromObject = function fromObject(object) {
+                        CompleteQueryRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CompleteQueryRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CompleteQueryRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -90984,7 +94868,7 @@
                             this.attributeResults = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -91084,9 +94968,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompleteQueryResponse.decode = function decode(reader, length, error) {
+                        CompleteQueryResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CompleteQueryResponse(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -91096,7 +94984,7 @@
                                 case 1: {
                                         if (!(message.completionResults && message.completionResults.length))
                                             message.completionResults = [];
-                                        message.completionResults.push($root.google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult.decode(reader, reader.uint32()));
+                                        message.completionResults.push($root.google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -91106,7 +94994,7 @@
                                 case 3: {
                                         if (!(message.recentSearchResults && message.recentSearchResults.length))
                                             message.recentSearchResults = [];
-                                        message.recentSearchResults.push($root.google.cloud.retail.v2alpha.CompleteQueryResponse.RecentSearchResult.decode(reader, reader.uint32()));
+                                        message.recentSearchResults.push($root.google.cloud.retail.v2alpha.CompleteQueryResponse.RecentSearchResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 4: {
@@ -91122,18 +95010,20 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributeResults, key);
                                         message.attributeResults[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -91164,14 +95054,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompleteQueryResponse.verify = function verify(message) {
+                        CompleteQueryResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.completionResults != null && message.hasOwnProperty("completionResults")) {
                                 if (!Array.isArray(message.completionResults))
                                     return "completionResults: array expected";
                                 for (var i = 0; i < message.completionResults.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult.verify(message.completionResults[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult.verify(message.completionResults[i], long + 1);
                                     if (error)
                                         return "completionResults." + error;
                                 }
@@ -91183,7 +95077,7 @@
                                 if (!Array.isArray(message.recentSearchResults))
                                     return "recentSearchResults: array expected";
                                 for (var i = 0; i < message.recentSearchResults.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.RecentSearchResult.verify(message.recentSearchResults[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.RecentSearchResult.verify(message.recentSearchResults[i], long + 1);
                                     if (error)
                                         return "recentSearchResults." + error;
                                 }
@@ -91193,7 +95087,7 @@
                                     return "attributeResults: object expected";
                                 var key = Object.keys(message.attributeResults);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult.verify(message.attributeResults[key[i]]);
+                                    var error = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult.verify(message.attributeResults[key[i]], long + 1);
                                     if (error)
                                         return "attributeResults." + error;
                                 }
@@ -91209,9 +95103,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CompleteQueryResponse} CompleteQueryResponse
                          */
-                        CompleteQueryResponse.fromObject = function fromObject(object) {
+                        CompleteQueryResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CompleteQueryResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CompleteQueryResponse();
                             if (object.completionResults) {
                                 if (!Array.isArray(object.completionResults))
@@ -91220,7 +95118,7 @@
                                 for (var i = 0; i < object.completionResults.length; ++i) {
                                     if (typeof object.completionResults[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.CompleteQueryResponse.completionResults: object expected");
-                                    message.completionResults[i] = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult.fromObject(object.completionResults[i]);
+                                    message.completionResults[i] = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult.fromObject(object.completionResults[i], long + 1);
                                 }
                             }
                             if (object.attributionToken != null)
@@ -91232,7 +95130,7 @@
                                 for (var i = 0; i < object.recentSearchResults.length; ++i) {
                                     if (typeof object.recentSearchResults[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.CompleteQueryResponse.recentSearchResults: object expected");
-                                    message.recentSearchResults[i] = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.RecentSearchResult.fromObject(object.recentSearchResults[i]);
+                                    message.recentSearchResults[i] = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.RecentSearchResult.fromObject(object.recentSearchResults[i], long + 1);
                                 }
                             }
                             if (object.attributeResults) {
@@ -91240,9 +95138,11 @@
                                     throw TypeError(".google.cloud.retail.v2alpha.CompleteQueryResponse.attributeResults: object expected");
                                 message.attributeResults = {};
                                 for (var keys = Object.keys(object.attributeResults), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributeResults, keys[i]);
                                     if (typeof object.attributeResults[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.CompleteQueryResponse.attributeResults: object expected");
-                                    message.attributeResults[keys[i]] = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult.fromObject(object.attributeResults[keys[i]]);
+                                    message.attributeResults[keys[i]] = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult.fromObject(object.attributeResults[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -91284,8 +95184,11 @@
                             var keys2;
                             if (message.attributeResults && (keys2 = Object.keys(message.attributeResults)).length) {
                                 object.attributeResults = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributeResults, keys2[j]);
                                     object.attributeResults[keys2[j]] = $root.google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult.toObject(message.attributeResults[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -91341,7 +95244,7 @@
                                 this.facets = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -91440,9 +95343,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            CompletionResult.decode = function decode(reader, length, error) {
+                            CompletionResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -91466,20 +95373,22 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.cloud.retail.v2alpha.CustomAttribute.decode(reader, reader.uint32());
+                                                    value = $root.google.cloud.retail.v2alpha.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.attributes, key);
                                             message.attributes[key] = value;
                                             break;
                                         }
                                     case 3: {
                                             if (!(message.facets && message.facets.length))
                                                 message.facets = [];
-                                            message.facets.push($root.google.cloud.retail.v2alpha.SearchResponse.Facet.decode(reader, reader.uint32()));
+                                            message.facets.push($root.google.cloud.retail.v2alpha.SearchResponse.Facet.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 4: {
@@ -91487,7 +95396,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -91518,9 +95427,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            CompletionResult.verify = function verify(message) {
+                            CompletionResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.suggestion != null && message.hasOwnProperty("suggestion"))
                                     if (!$util.isString(message.suggestion))
                                         return "suggestion: string expected";
@@ -91529,7 +95442,7 @@
                                         return "attributes: object expected";
                                     var key = Object.keys(message.attributes);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.CustomAttribute.verify(message.attributes[key[i]]);
+                                        var error = $root.google.cloud.retail.v2alpha.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                         if (error)
                                             return "attributes." + error;
                                     }
@@ -91538,7 +95451,7 @@
                                     if (!Array.isArray(message.facets))
                                         return "facets: array expected";
                                     for (var i = 0; i < message.facets.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.verify(message.facets[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.verify(message.facets[i], long + 1);
                                         if (error)
                                             return "facets." + error;
                                     }
@@ -91557,9 +95470,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult} CompletionResult
                              */
-                            CompletionResult.fromObject = function fromObject(object) {
+                            CompletionResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult();
                                 if (object.suggestion != null)
                                     message.suggestion = String(object.suggestion);
@@ -91568,9 +95485,11 @@
                                         throw TypeError(".google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult.attributes: object expected");
                                     message.attributes = {};
                                     for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.attributes, keys[i]);
                                         if (typeof object.attributes[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult.attributes: object expected");
-                                        message.attributes[keys[i]] = $root.google.cloud.retail.v2alpha.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                        message.attributes[keys[i]] = $root.google.cloud.retail.v2alpha.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                     }
                                 }
                                 if (object.facets) {
@@ -91580,7 +95499,7 @@
                                     for (var i = 0; i < object.facets.length; ++i) {
                                         if (typeof object.facets[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.CompleteQueryResponse.CompletionResult.facets: object expected");
-                                        message.facets[i] = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.fromObject(object.facets[i]);
+                                        message.facets[i] = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.fromObject(object.facets[i], long + 1);
                                     }
                                 }
                                 if (object.totalProductCount != null)
@@ -91614,8 +95533,11 @@
                                 var keys2;
                                 if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                     object.attributes = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.attributes, keys2[j]);
                                         object.attributes[keys2[j]] = $root.google.cloud.retail.v2alpha.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                    }
                                 }
                                 if (message.facets && message.facets.length) {
                                     object.facets = [];
@@ -91676,7 +95598,7 @@
                             function RecentSearchResult(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -91741,9 +95663,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RecentSearchResult.decode = function decode(reader, length, error) {
+                            RecentSearchResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CompleteQueryResponse.RecentSearchResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -91755,7 +95681,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -91786,9 +95712,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RecentSearchResult.verify = function verify(message) {
+                            RecentSearchResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.recentSearch != null && message.hasOwnProperty("recentSearch"))
                                     if (!$util.isString(message.recentSearch))
                                         return "recentSearch: string expected";
@@ -91803,9 +95733,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.CompleteQueryResponse.RecentSearchResult} RecentSearchResult
                              */
-                            RecentSearchResult.fromObject = function fromObject(object) {
+                            RecentSearchResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.CompleteQueryResponse.RecentSearchResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.CompleteQueryResponse.RecentSearchResult();
                                 if (object.recentSearch != null)
                                     message.recentSearch = String(object.recentSearch);
@@ -91882,7 +95816,7 @@
                                 this.suggestions = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -91948,9 +95882,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            AttributeResult.decode = function decode(reader, length, error) {
+                            AttributeResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -91964,7 +95902,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -91995,9 +95933,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            AttributeResult.verify = function verify(message) {
+                            AttributeResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.suggestions != null && message.hasOwnProperty("suggestions")) {
                                     if (!Array.isArray(message.suggestions))
                                         return "suggestions: array expected";
@@ -92016,9 +95958,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult} AttributeResult
                              */
-                            AttributeResult.fromObject = function fromObject(object) {
+                            AttributeResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.CompleteQueryResponse.AttributeResult();
                                 if (object.suggestions) {
                                     if (!Array.isArray(object.suggestions))
@@ -92174,7 +96120,7 @@
                         function ProductAttributeValue(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -92249,9 +96195,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductAttributeValue.decode = function decode(reader, length, error) {
+                        ProductAttributeValue.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ProductAttributeValue();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -92267,7 +96217,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -92298,9 +96248,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductAttributeValue.verify = function verify(message) {
+                        ProductAttributeValue.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -92318,9 +96272,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ProductAttributeValue} ProductAttributeValue
                          */
-                        ProductAttributeValue.fromObject = function fromObject(object) {
+                        ProductAttributeValue.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ProductAttributeValue)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ProductAttributeValue();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -92403,7 +96361,7 @@
                         function ProductAttributeInterval(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -92478,9 +96436,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductAttributeInterval.decode = function decode(reader, length, error) {
+                        ProductAttributeInterval.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ProductAttributeInterval();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -92492,11 +96454,11 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.interval = $root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32());
+                                        message.interval = $root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -92527,14 +96489,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductAttributeInterval.verify = function verify(message) {
+                        ProductAttributeInterval.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
                             if (message.interval != null && message.hasOwnProperty("interval")) {
-                                var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.interval);
+                                var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.interval, long + 1);
                                 if (error)
                                     return "interval." + error;
                             }
@@ -92549,16 +96515,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ProductAttributeInterval} ProductAttributeInterval
                          */
-                        ProductAttributeInterval.fromObject = function fromObject(object) {
+                        ProductAttributeInterval.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ProductAttributeInterval)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ProductAttributeInterval();
                             if (object.name != null)
                                 message.name = String(object.name);
                             if (object.interval != null) {
                                 if (typeof object.interval !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ProductAttributeInterval.interval: object expected");
-                                message.interval = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.interval);
+                                message.interval = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.interval, long + 1);
                             }
                             return message;
                         };
@@ -92638,7 +96608,7 @@
                         function Tile(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -92737,9 +96707,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Tile.decode = function decode(reader, length, error) {
+                        Tile.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Tile();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -92747,11 +96721,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32());
+                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.productAttributeInterval = $root.google.cloud.retail.v2alpha.ProductAttributeInterval.decode(reader, reader.uint32());
+                                        message.productAttributeInterval = $root.google.cloud.retail.v2alpha.ProductAttributeInterval.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -92759,7 +96733,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -92790,14 +96764,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Tile.verify = function verify(message) {
+                        Tile.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
                                 properties.productAttribute = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue);
+                                    var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                     if (error)
                                         return "productAttributeValue." + error;
                                 }
@@ -92807,7 +96785,7 @@
                                     return "productAttribute: multiple values";
                                 properties.productAttribute = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.ProductAttributeInterval.verify(message.productAttributeInterval);
+                                    var error = $root.google.cloud.retail.v2alpha.ProductAttributeInterval.verify(message.productAttributeInterval, long + 1);
                                     if (error)
                                         return "productAttributeInterval." + error;
                                 }
@@ -92826,19 +96804,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Tile} Tile
                          */
-                        Tile.fromObject = function fromObject(object) {
+                        Tile.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Tile)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Tile();
                             if (object.productAttributeValue != null) {
                                 if (typeof object.productAttributeValue !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Tile.productAttributeValue: object expected");
-                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                             }
                             if (object.productAttributeInterval != null) {
                                 if (typeof object.productAttributeInterval !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Tile.productAttributeInterval: object expected");
-                                message.productAttributeInterval = $root.google.cloud.retail.v2alpha.ProductAttributeInterval.fromObject(object.productAttributeInterval);
+                                message.productAttributeInterval = $root.google.cloud.retail.v2alpha.ProductAttributeInterval.fromObject(object.productAttributeInterval, long + 1);
                             }
                             if (object.representativeProductId != null)
                                 message.representativeProductId = String(object.representativeProductId);
@@ -92958,7 +96940,7 @@
                             this.userAttributes = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -93329,9 +97311,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchRequest.decode = function decode(reader, length, error) {
+                        SearchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -93355,7 +97341,7 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.decode(reader, reader.uint32());
+                                        message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -93385,19 +97371,19 @@
                                 case 12: {
                                         if (!(message.facetSpecs && message.facetSpecs.length))
                                             message.facetSpecs = [];
-                                        message.facetSpecs.push($root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.decode(reader, reader.uint32()));
+                                        message.facetSpecs.push($root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 21: {
-                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32());
+                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
-                                        message.boostSpec = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.decode(reader, reader.uint32());
+                                        message.boostSpec = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
-                                        message.queryExpansionSpec = $root.google.cloud.retail.v2alpha.SearchRequest.QueryExpansionSpec.decode(reader, reader.uint32());
+                                        message.queryExpansionSpec = $root.google.cloud.retail.v2alpha.SearchRequest.QueryExpansionSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 15: {
@@ -93425,7 +97411,7 @@
                                         break;
                                     }
                                 case 32: {
-                                        message.personalizationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32());
+                                        message.personalizationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 34: {
@@ -93444,15 +97430,17 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
                                 case 35: {
-                                        message.spellCorrectionSpec = $root.google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec.decode(reader, reader.uint32());
+                                        message.spellCorrectionSpec = $root.google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 38: {
@@ -93460,11 +97448,11 @@
                                         break;
                                     }
                                 case 40: {
-                                        message.conversationalSearchSpec = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.decode(reader, reader.uint32());
+                                        message.conversationalSearchSpec = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 41: {
-                                        message.tileNavigationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec.decode(reader, reader.uint32());
+                                        message.tileNavigationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 43: {
@@ -93492,18 +97480,20 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2alpha.StringList.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2alpha.StringList.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.userAttributes, key);
                                         message.userAttributes[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -93534,9 +97524,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchRequest.verify = function verify(message) {
+                        SearchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.placement != null && message.hasOwnProperty("placement"))
                                 if (!$util.isString(message.placement))
@@ -93551,7 +97545,7 @@
                                 if (!$util.isString(message.visitorId))
                                     return "visitorId: string expected";
                             if (message.userInfo != null && message.hasOwnProperty("userInfo")) {
-                                var error = $root.google.cloud.retail.v2alpha.UserInfo.verify(message.userInfo);
+                                var error = $root.google.cloud.retail.v2alpha.UserInfo.verify(message.userInfo, long + 1);
                                 if (error)
                                     return "userInfo." + error;
                             }
@@ -93577,23 +97571,23 @@
                                 if (!Array.isArray(message.facetSpecs))
                                     return "facetSpecs: array expected";
                                 for (var i = 0; i < message.facetSpecs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.verify(message.facetSpecs[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.verify(message.facetSpecs[i], long + 1);
                                     if (error)
                                         return "facetSpecs." + error;
                                 }
                             }
                             if (message.dynamicFacetSpec != null && message.hasOwnProperty("dynamicFacetSpec")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec);
+                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec, long + 1);
                                 if (error)
                                     return "dynamicFacetSpec." + error;
                             }
                             if (message.boostSpec != null && message.hasOwnProperty("boostSpec")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.verify(message.boostSpec);
+                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.verify(message.boostSpec, long + 1);
                                 if (error)
                                     return "boostSpec." + error;
                             }
                             if (message.queryExpansionSpec != null && message.hasOwnProperty("queryExpansionSpec")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.QueryExpansionSpec.verify(message.queryExpansionSpec);
+                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.QueryExpansionSpec.verify(message.queryExpansionSpec, long + 1);
                                 if (error)
                                     return "queryExpansionSpec." + error;
                             }
@@ -93635,7 +97629,7 @@
                                     break;
                                 }
                             if (message.personalizationSpec != null && message.hasOwnProperty("personalizationSpec")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec);
+                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec, long + 1);
                                 if (error)
                                     return "personalizationSpec." + error;
                             }
@@ -93650,7 +97644,7 @@
                             if (message.spellCorrectionSpec != null && message.hasOwnProperty("spellCorrectionSpec")) {
                                 properties._spellCorrectionSpec = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec.verify(message.spellCorrectionSpec);
+                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec.verify(message.spellCorrectionSpec, long + 1);
                                     if (error)
                                         return "spellCorrectionSpec." + error;
                                 }
@@ -93659,12 +97653,12 @@
                                 if (!$util.isString(message.entity))
                                     return "entity: string expected";
                             if (message.conversationalSearchSpec != null && message.hasOwnProperty("conversationalSearchSpec")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.verify(message.conversationalSearchSpec);
+                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.verify(message.conversationalSearchSpec, long + 1);
                                 if (error)
                                     return "conversationalSearchSpec." + error;
                             }
                             if (message.tileNavigationSpec != null && message.hasOwnProperty("tileNavigationSpec")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec.verify(message.tileNavigationSpec);
+                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec.verify(message.tileNavigationSpec, long + 1);
                                 if (error)
                                     return "tileNavigationSpec." + error;
                             }
@@ -93682,7 +97676,7 @@
                                     return "userAttributes: object expected";
                                 var key = Object.keys(message.userAttributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.StringList.verify(message.userAttributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2alpha.StringList.verify(message.userAttributes[key[i]], long + 1);
                                     if (error)
                                         return "userAttributes." + error;
                                 }
@@ -93698,9 +97692,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.SearchRequest} SearchRequest
                          */
-                        SearchRequest.fromObject = function fromObject(object) {
+                        SearchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.SearchRequest();
                             if (object.placement != null)
                                 message.placement = String(object.placement);
@@ -93713,7 +97711,7 @@
                             if (object.userInfo != null) {
                                 if (typeof object.userInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.userInfo: object expected");
-                                message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.fromObject(object.userInfo);
+                                message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.fromObject(object.userInfo, long + 1);
                             }
                             if (object.pageSize != null)
                                 message.pageSize = object.pageSize | 0;
@@ -93734,23 +97732,23 @@
                                 for (var i = 0; i < object.facetSpecs.length; ++i) {
                                     if (typeof object.facetSpecs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.facetSpecs: object expected");
-                                    message.facetSpecs[i] = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.fromObject(object.facetSpecs[i]);
+                                    message.facetSpecs[i] = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.fromObject(object.facetSpecs[i], long + 1);
                                 }
                             }
                             if (object.dynamicFacetSpec != null) {
                                 if (typeof object.dynamicFacetSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.dynamicFacetSpec: object expected");
-                                message.dynamicFacetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec);
+                                message.dynamicFacetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec, long + 1);
                             }
                             if (object.boostSpec != null) {
                                 if (typeof object.boostSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.boostSpec: object expected");
-                                message.boostSpec = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.fromObject(object.boostSpec);
+                                message.boostSpec = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.fromObject(object.boostSpec, long + 1);
                             }
                             if (object.queryExpansionSpec != null) {
                                 if (typeof object.queryExpansionSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.queryExpansionSpec: object expected");
-                                message.queryExpansionSpec = $root.google.cloud.retail.v2alpha.SearchRequest.QueryExpansionSpec.fromObject(object.queryExpansionSpec);
+                                message.queryExpansionSpec = $root.google.cloud.retail.v2alpha.SearchRequest.QueryExpansionSpec.fromObject(object.queryExpansionSpec, long + 1);
                             }
                             switch (object.relevanceThreshold) {
                             default:
@@ -93819,31 +97817,34 @@
                             if (object.personalizationSpec != null) {
                                 if (typeof object.personalizationSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.personalizationSpec: object expected");
-                                message.personalizationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec);
+                                message.personalizationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec, long + 1);
                             }
                             if (object.labels) {
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.spellCorrectionSpec != null) {
                                 if (typeof object.spellCorrectionSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.spellCorrectionSpec: object expected");
-                                message.spellCorrectionSpec = $root.google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec.fromObject(object.spellCorrectionSpec);
+                                message.spellCorrectionSpec = $root.google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec.fromObject(object.spellCorrectionSpec, long + 1);
                             }
                             if (object.entity != null)
                                 message.entity = String(object.entity);
                             if (object.conversationalSearchSpec != null) {
                                 if (typeof object.conversationalSearchSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.conversationalSearchSpec: object expected");
-                                message.conversationalSearchSpec = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.fromObject(object.conversationalSearchSpec);
+                                message.conversationalSearchSpec = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.fromObject(object.conversationalSearchSpec, long + 1);
                             }
                             if (object.tileNavigationSpec != null) {
                                 if (typeof object.tileNavigationSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.tileNavigationSpec: object expected");
-                                message.tileNavigationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec.fromObject(object.tileNavigationSpec);
+                                message.tileNavigationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec.fromObject(object.tileNavigationSpec, long + 1);
                             }
                             if (object.languageCode != null)
                                 message.languageCode = String(object.languageCode);
@@ -93856,9 +97857,11 @@
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.userAttributes: object expected");
                                 message.userAttributes = {};
                                 for (var keys = Object.keys(object.userAttributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.userAttributes, keys[i]);
                                     if (typeof object.userAttributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.userAttributes: object expected");
-                                    message.userAttributes[keys[i]] = $root.google.cloud.retail.v2alpha.StringList.fromObject(object.userAttributes[keys[i]]);
+                                    message.userAttributes[keys[i]] = $root.google.cloud.retail.v2alpha.StringList.fromObject(object.userAttributes[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -93966,8 +97969,11 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.spellCorrectionSpec != null && message.hasOwnProperty("spellCorrectionSpec")) {
                                 object.spellCorrectionSpec = $root.google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec.toObject(message.spellCorrectionSpec, options);
@@ -93988,8 +97994,11 @@
                                 object.placeId = message.placeId;
                             if (message.userAttributes && (keys2 = Object.keys(message.userAttributes)).length) {
                                 object.userAttributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.userAttributes, keys2[j]);
                                     object.userAttributes[keys2[j]] = $root.google.cloud.retail.v2alpha.StringList.toObject(message.userAttributes[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -94044,7 +98053,7 @@
                                 this.excludedFilterKeys = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -94140,9 +98149,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FacetSpec.decode = function decode(reader, length, error) {
+                            FacetSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -94150,7 +98163,7 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.facetKey = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey.decode(reader, reader.uint32());
+                                            message.facetKey = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
@@ -94168,7 +98181,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -94199,11 +98212,15 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FacetSpec.verify = function verify(message) {
+                            FacetSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.facetKey != null && message.hasOwnProperty("facetKey")) {
-                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey.verify(message.facetKey);
+                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey.verify(message.facetKey, long + 1);
                                     if (error)
                                         return "facetKey." + error;
                                 }
@@ -94231,14 +98248,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchRequest.FacetSpec} FacetSpec
                              */
-                            FacetSpec.fromObject = function fromObject(object) {
+                            FacetSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec();
                                 if (object.facetKey != null) {
                                     if (typeof object.facetKey !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.FacetSpec.facetKey: object expected");
-                                    message.facetKey = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey.fromObject(object.facetKey);
+                                    message.facetKey = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey.fromObject(object.facetKey, long + 1);
                                 }
                                 if (object.limit != null)
                                     message.limit = object.limit | 0;
@@ -94346,7 +98367,7 @@
                                     this.contains = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -94495,9 +98516,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FacetKey.decode = function decode(reader, length, error) {
+                                FacetKey.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -94511,7 +98536,7 @@
                                         case 2: {
                                                 if (!(message.intervals && message.intervals.length))
                                                     message.intervals = [];
-                                                message.intervals.push($root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32()));
+                                                message.intervals.push($root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         case 3: {
@@ -94549,7 +98574,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -94580,9 +98605,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FacetKey.verify = function verify(message) {
+                                FacetKey.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.key != null && message.hasOwnProperty("key"))
                                         if (!$util.isString(message.key))
                                             return "key: string expected";
@@ -94590,7 +98619,7 @@
                                         if (!Array.isArray(message.intervals))
                                             return "intervals: array expected";
                                         for (var i = 0; i < message.intervals.length; ++i) {
-                                            var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.intervals[i]);
+                                            var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.intervals[i], long + 1);
                                             if (error)
                                                 return "intervals." + error;
                                         }
@@ -94639,9 +98668,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey} FacetKey
                                  */
-                                FacetKey.fromObject = function fromObject(object) {
+                                FacetKey.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey();
                                     if (object.key != null)
                                         message.key = String(object.key);
@@ -94652,7 +98685,7 @@
                                         for (var i = 0; i < object.intervals.length; ++i) {
                                             if (typeof object.intervals[i] !== "object")
                                                 throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.FacetSpec.FacetKey.intervals: object expected");
-                                            message.intervals[i] = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.intervals[i]);
+                                            message.intervals[i] = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.intervals[i], long + 1);
                                         }
                                     }
                                     if (object.restrictedValues) {
@@ -94798,7 +98831,7 @@
                             function DynamicFacetSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -94863,9 +98896,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DynamicFacetSpec.decode = function decode(reader, length, error) {
+                            DynamicFacetSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -94877,7 +98914,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -94908,9 +98945,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DynamicFacetSpec.verify = function verify(message) {
+                            DynamicFacetSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -94931,9 +98972,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec} DynamicFacetSpec
                              */
-                            DynamicFacetSpec.fromObject = function fromObject(object) {
+                            DynamicFacetSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec();
                                 switch (object.mode) {
                                 default:
@@ -95045,7 +99090,7 @@
                                 this.conditionBoostSpecs = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -95130,9 +99175,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BoostSpec.decode = function decode(reader, length, error) {
+                            BoostSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -95142,7 +99191,7 @@
                                     case 1: {
                                             if (!(message.conditionBoostSpecs && message.conditionBoostSpecs.length))
                                                 message.conditionBoostSpecs = [];
-                                            message.conditionBoostSpecs.push($root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32()));
+                                            message.conditionBoostSpecs.push($root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
@@ -95150,7 +99199,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -95181,15 +99230,19 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BoostSpec.verify = function verify(message) {
+                            BoostSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.conditionBoostSpecs != null && message.hasOwnProperty("conditionBoostSpecs")) {
                                     if (!Array.isArray(message.conditionBoostSpecs))
                                         return "conditionBoostSpecs: array expected";
                                     for (var i = 0; i < message.conditionBoostSpecs.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.conditionBoostSpecs[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.conditionBoostSpecs[i], long + 1);
                                         if (error)
                                             return "conditionBoostSpecs." + error;
                                     }
@@ -95210,9 +99263,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchRequest.BoostSpec} BoostSpec
                              */
-                            BoostSpec.fromObject = function fromObject(object) {
+                            BoostSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec();
                                 if (object.conditionBoostSpecs) {
                                     if (!Array.isArray(object.conditionBoostSpecs))
@@ -95221,7 +99278,7 @@
                                     for (var i = 0; i < object.conditionBoostSpecs.length; ++i) {
                                         if (typeof object.conditionBoostSpecs[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.BoostSpec.conditionBoostSpecs: object expected");
-                                        message.conditionBoostSpecs[i] = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.conditionBoostSpecs[i]);
+                                        message.conditionBoostSpecs[i] = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.conditionBoostSpecs[i], long + 1);
                                     }
                                 }
                                 if (object.skipBoostSpecValidation != null)
@@ -95304,7 +99361,7 @@
                                 function ConditionBoostSpec(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -95379,9 +99436,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                ConditionBoostSpec.decode = function decode(reader, length, error) {
+                                ConditionBoostSpec.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -95397,7 +99458,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -95428,9 +99489,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                ConditionBoostSpec.verify = function verify(message) {
+                                ConditionBoostSpec.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.condition != null && message.hasOwnProperty("condition"))
                                         if (!$util.isString(message.condition))
                                             return "condition: string expected";
@@ -95448,9 +99513,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec} ConditionBoostSpec
                                  */
-                                ConditionBoostSpec.fromObject = function fromObject(object) {
+                                ConditionBoostSpec.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec();
                                     if (object.condition != null)
                                         message.condition = String(object.condition);
@@ -95536,7 +99605,7 @@
                             function QueryExpansionSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -95611,9 +99680,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            QueryExpansionSpec.decode = function decode(reader, length, error) {
+                            QueryExpansionSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.QueryExpansionSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -95629,7 +99702,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -95660,9 +99733,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            QueryExpansionSpec.verify = function verify(message) {
+                            QueryExpansionSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.condition != null && message.hasOwnProperty("condition"))
                                     switch (message.condition) {
                                     default:
@@ -95686,9 +99763,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchRequest.QueryExpansionSpec} QueryExpansionSpec
                              */
-                            QueryExpansionSpec.fromObject = function fromObject(object) {
+                            QueryExpansionSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.QueryExpansionSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchRequest.QueryExpansionSpec();
                                 switch (object.condition) {
                                 default:
@@ -95804,7 +99885,7 @@
                             function PersonalizationSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -95869,9 +99950,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PersonalizationSpec.decode = function decode(reader, length, error) {
+                            PersonalizationSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -95883,7 +99968,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -95914,9 +99999,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PersonalizationSpec.verify = function verify(message) {
+                            PersonalizationSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -95937,9 +100026,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec} PersonalizationSpec
                              */
-                            PersonalizationSpec.fromObject = function fromObject(object) {
+                            PersonalizationSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec();
                                 switch (object.mode) {
                                 default:
@@ -96049,7 +100142,7 @@
                             function SpellCorrectionSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -96114,9 +100207,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SpellCorrectionSpec.decode = function decode(reader, length, error) {
+                            SpellCorrectionSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -96128,7 +100225,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -96159,9 +100256,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SpellCorrectionSpec.verify = function verify(message) {
+                            SpellCorrectionSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -96182,9 +100283,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec} SpellCorrectionSpec
                              */
-                            SpellCorrectionSpec.fromObject = function fromObject(object) {
+                            SpellCorrectionSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchRequest.SpellCorrectionSpec();
                                 switch (object.mode) {
                                 default:
@@ -96296,7 +100401,7 @@
                             function ConversationalSearchSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -96381,9 +100486,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalSearchSpec.decode = function decode(reader, length, error) {
+                            ConversationalSearchSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -96399,11 +100508,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.userAnswer = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.decode(reader, reader.uint32());
+                                            message.userAnswer = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -96434,9 +100543,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalSearchSpec.verify = function verify(message) {
+                            ConversationalSearchSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.followupConversationRequested != null && message.hasOwnProperty("followupConversationRequested"))
                                     if (typeof message.followupConversationRequested !== "boolean")
                                         return "followupConversationRequested: boolean expected";
@@ -96444,7 +100557,7 @@
                                     if (!$util.isString(message.conversationId))
                                         return "conversationId: string expected";
                                 if (message.userAnswer != null && message.hasOwnProperty("userAnswer")) {
-                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.verify(message.userAnswer);
+                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.verify(message.userAnswer, long + 1);
                                     if (error)
                                         return "userAnswer." + error;
                                 }
@@ -96459,9 +100572,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec} ConversationalSearchSpec
                              */
-                            ConversationalSearchSpec.fromObject = function fromObject(object) {
+                            ConversationalSearchSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec();
                                 if (object.followupConversationRequested != null)
                                     message.followupConversationRequested = Boolean(object.followupConversationRequested);
@@ -96470,7 +100587,7 @@
                                 if (object.userAnswer != null) {
                                     if (typeof object.userAnswer !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.userAnswer: object expected");
-                                    message.userAnswer = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.fromObject(object.userAnswer);
+                                    message.userAnswer = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.fromObject(object.userAnswer, long + 1);
                                 }
                                 return message;
                             };
@@ -96549,7 +100666,7 @@
                                 function UserAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -96638,9 +100755,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                UserAnswer.decode = function decode(reader, length, error) {
+                                UserAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -96652,11 +100773,11 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.selectedAnswer = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.decode(reader, reader.uint32());
+                                                message.selectedAnswer = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -96687,9 +100808,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                UserAnswer.verify = function verify(message) {
+                                UserAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.textAnswer != null && message.hasOwnProperty("textAnswer")) {
                                         properties.type = 1;
@@ -96701,7 +100826,7 @@
                                             return "type: multiple values";
                                         properties.type = 1;
                                         {
-                                            var error = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.verify(message.selectedAnswer);
+                                            var error = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.verify(message.selectedAnswer, long + 1);
                                             if (error)
                                                 return "selectedAnswer." + error;
                                         }
@@ -96717,16 +100842,20 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer} UserAnswer
                                  */
-                                UserAnswer.fromObject = function fromObject(object) {
+                                UserAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer();
                                     if (object.textAnswer != null)
                                         message.textAnswer = String(object.textAnswer);
                                     if (object.selectedAnswer != null) {
                                         if (typeof object.selectedAnswer !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.selectedAnswer: object expected");
-                                        message.selectedAnswer = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer);
+                                        message.selectedAnswer = $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer, long + 1);
                                     }
                                     return message;
                                 };
@@ -96805,7 +100934,7 @@
                                         this.productAttributeValues = [];
                                         if (properties)
                                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                                if (properties[keys[i]] != null)
+                                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                     this[keys[i]] = properties[keys[i]];
                                     }
     
@@ -96881,9 +101010,13 @@
                                      * @throws {Error} If the payload is not a reader or valid buffer
                                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                      */
-                                    SelectedAnswer.decode = function decode(reader, length, error) {
+                                    SelectedAnswer.decode = function decode(reader, length, error, long) {
                                         if (!(reader instanceof $Reader))
                                             reader = $Reader.create(reader);
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $Reader.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer();
                                         while (reader.pos < end) {
                                             var tag = reader.uint32();
@@ -96893,15 +101026,15 @@
                                             case 1: {
                                                     if (!(message.productAttributeValues && message.productAttributeValues.length))
                                                         message.productAttributeValues = [];
-                                                    message.productAttributeValues.push($root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32()));
+                                                    message.productAttributeValues.push($root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1));
                                                     break;
                                                 }
                                             case 2: {
-                                                    message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32());
+                                                    message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 }
                                             default:
-                                                reader.skipType(tag & 7);
+                                                reader.skipType(tag & 7, long);
                                                 break;
                                             }
                                         }
@@ -96932,20 +101065,24 @@
                                      * @param {Object.<string,*>} message Plain object to verify
                                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                      */
-                                    SelectedAnswer.verify = function verify(message) {
+                                    SelectedAnswer.verify = function verify(message, long) {
                                         if (typeof message !== "object" || message === null)
                                             return "object expected";
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            return "maximum nesting depth exceeded";
                                         if (message.productAttributeValues != null && message.hasOwnProperty("productAttributeValues")) {
                                             if (!Array.isArray(message.productAttributeValues))
                                                 return "productAttributeValues: array expected";
                                             for (var i = 0; i < message.productAttributeValues.length; ++i) {
-                                                var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValues[i]);
+                                                var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValues[i], long + 1);
                                                 if (error)
                                                     return "productAttributeValues." + error;
                                             }
                                         }
                                         if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                            var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue);
+                                            var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                             if (error)
                                                 return "productAttributeValue." + error;
                                         }
@@ -96960,9 +101097,13 @@
                                      * @param {Object.<string,*>} object Plain object
                                      * @returns {google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer} SelectedAnswer
                                      */
-                                    SelectedAnswer.fromObject = function fromObject(object) {
+                                    SelectedAnswer.fromObject = function fromObject(object, long) {
                                         if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer)
                                             return object;
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var message = new $root.google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer();
                                         if (object.productAttributeValues) {
                                             if (!Array.isArray(object.productAttributeValues))
@@ -96971,13 +101112,13 @@
                                             for (var i = 0; i < object.productAttributeValues.length; ++i) {
                                                 if (typeof object.productAttributeValues[i] !== "object")
                                                     throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.productAttributeValues: object expected");
-                                                message.productAttributeValues[i] = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValues[i]);
+                                                message.productAttributeValues[i] = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValues[i], long + 1);
                                             }
                                         }
                                         if (object.productAttributeValue != null) {
                                             if (typeof object.productAttributeValue !== "object")
                                                 throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.productAttributeValue: object expected");
-                                            message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                            message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                         }
                                         return message;
                                     };
@@ -97066,7 +101207,7 @@
                                 this.appliedTiles = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -97142,9 +101283,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TileNavigationSpec.decode = function decode(reader, length, error) {
+                            TileNavigationSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -97158,11 +101303,11 @@
                                     case 2: {
                                             if (!(message.appliedTiles && message.appliedTiles.length))
                                                 message.appliedTiles = [];
-                                            message.appliedTiles.push($root.google.cloud.retail.v2alpha.Tile.decode(reader, reader.uint32()));
+                                            message.appliedTiles.push($root.google.cloud.retail.v2alpha.Tile.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -97193,9 +101338,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TileNavigationSpec.verify = function verify(message) {
+                            TileNavigationSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.tileNavigationRequested != null && message.hasOwnProperty("tileNavigationRequested"))
                                     if (typeof message.tileNavigationRequested !== "boolean")
                                         return "tileNavigationRequested: boolean expected";
@@ -97203,7 +101352,7 @@
                                     if (!Array.isArray(message.appliedTiles))
                                         return "appliedTiles: array expected";
                                     for (var i = 0; i < message.appliedTiles.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.Tile.verify(message.appliedTiles[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.Tile.verify(message.appliedTiles[i], long + 1);
                                         if (error)
                                             return "appliedTiles." + error;
                                     }
@@ -97219,9 +101368,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec} TileNavigationSpec
                              */
-                            TileNavigationSpec.fromObject = function fromObject(object) {
+                            TileNavigationSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec();
                                 if (object.tileNavigationRequested != null)
                                     message.tileNavigationRequested = Boolean(object.tileNavigationRequested);
@@ -97232,7 +101385,7 @@
                                     for (var i = 0; i < object.appliedTiles.length; ++i) {
                                         if (typeof object.appliedTiles[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchRequest.TileNavigationSpec.appliedTiles: object expected");
-                                        message.appliedTiles[i] = $root.google.cloud.retail.v2alpha.Tile.fromObject(object.appliedTiles[i]);
+                                        message.appliedTiles[i] = $root.google.cloud.retail.v2alpha.Tile.fromObject(object.appliedTiles[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -97371,7 +101524,7 @@
                             this.experimentInfo = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -97571,9 +101724,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchResponse.decode = function decode(reader, length, error) {
+                        SearchResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -97583,13 +101740,13 @@
                                 case 1: {
                                         if (!(message.results && message.results.length))
                                             message.results = [];
-                                        message.results.push($root.google.cloud.retail.v2alpha.SearchResponse.SearchResult.decode(reader, reader.uint32()));
+                                        message.results.push($root.google.cloud.retail.v2alpha.SearchResponse.SearchResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
                                         if (!(message.facets && message.facets.length))
                                             message.facets = [];
-                                        message.facets.push($root.google.cloud.retail.v2alpha.SearchResponse.Facet.decode(reader, reader.uint32()));
+                                        message.facets.push($root.google.cloud.retail.v2alpha.SearchResponse.Facet.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 3: {
@@ -97609,7 +101766,7 @@
                                         break;
                                     }
                                 case 7: {
-                                        message.queryExpansionInfo = $root.google.cloud.retail.v2alpha.SearchResponse.QueryExpansionInfo.decode(reader, reader.uint32());
+                                        message.queryExpansionInfo = $root.google.cloud.retail.v2alpha.SearchResponse.QueryExpansionInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -97623,31 +101780,31 @@
                                         break;
                                     }
                                 case 22: {
-                                        message.pinControlMetadata = $root.google.cloud.retail.v2alpha.PinControlMetadata.decode(reader, reader.uint32());
+                                        message.pinControlMetadata = $root.google.cloud.retail.v2alpha.PinControlMetadata.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
                                         if (!(message.invalidConditionBoostSpecs && message.invalidConditionBoostSpecs.length))
                                             message.invalidConditionBoostSpecs = [];
-                                        message.invalidConditionBoostSpecs.push($root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32()));
+                                        message.invalidConditionBoostSpecs.push($root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 17: {
                                         if (!(message.experimentInfo && message.experimentInfo.length))
                                             message.experimentInfo = [];
-                                        message.experimentInfo.push($root.google.cloud.retail.v2alpha.ExperimentInfo.decode(reader, reader.uint32()));
+                                        message.experimentInfo.push($root.google.cloud.retail.v2alpha.ExperimentInfo.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 18: {
-                                        message.conversationalSearchResult = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.decode(reader, reader.uint32());
+                                        message.conversationalSearchResult = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
-                                        message.tileNavigationResult = $root.google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult.decode(reader, reader.uint32());
+                                        message.tileNavigationResult = $root.google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -97678,14 +101835,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchResponse.verify = function verify(message) {
+                        SearchResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.results != null && message.hasOwnProperty("results")) {
                                 if (!Array.isArray(message.results))
                                     return "results: array expected";
                                 for (var i = 0; i < message.results.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.SearchResponse.SearchResult.verify(message.results[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.SearchResponse.SearchResult.verify(message.results[i], long + 1);
                                     if (error)
                                         return "results." + error;
                                 }
@@ -97694,7 +101855,7 @@
                                 if (!Array.isArray(message.facets))
                                     return "facets: array expected";
                                 for (var i = 0; i < message.facets.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.verify(message.facets[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.verify(message.facets[i], long + 1);
                                     if (error)
                                         return "facets." + error;
                                 }
@@ -97712,7 +101873,7 @@
                                 if (!$util.isString(message.nextPageToken))
                                     return "nextPageToken: string expected";
                             if (message.queryExpansionInfo != null && message.hasOwnProperty("queryExpansionInfo")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchResponse.QueryExpansionInfo.verify(message.queryExpansionInfo);
+                                var error = $root.google.cloud.retail.v2alpha.SearchResponse.QueryExpansionInfo.verify(message.queryExpansionInfo, long + 1);
                                 if (error)
                                     return "queryExpansionInfo." + error;
                             }
@@ -97727,7 +101888,7 @@
                                         return "appliedControls: string[] expected";
                             }
                             if (message.pinControlMetadata != null && message.hasOwnProperty("pinControlMetadata")) {
-                                var error = $root.google.cloud.retail.v2alpha.PinControlMetadata.verify(message.pinControlMetadata);
+                                var error = $root.google.cloud.retail.v2alpha.PinControlMetadata.verify(message.pinControlMetadata, long + 1);
                                 if (error)
                                     return "pinControlMetadata." + error;
                             }
@@ -97735,7 +101896,7 @@
                                 if (!Array.isArray(message.invalidConditionBoostSpecs))
                                     return "invalidConditionBoostSpecs: array expected";
                                 for (var i = 0; i < message.invalidConditionBoostSpecs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.invalidConditionBoostSpecs[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.invalidConditionBoostSpecs[i], long + 1);
                                     if (error)
                                         return "invalidConditionBoostSpecs." + error;
                                 }
@@ -97744,18 +101905,18 @@
                                 if (!Array.isArray(message.experimentInfo))
                                     return "experimentInfo: array expected";
                                 for (var i = 0; i < message.experimentInfo.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.ExperimentInfo.verify(message.experimentInfo[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.ExperimentInfo.verify(message.experimentInfo[i], long + 1);
                                     if (error)
                                         return "experimentInfo." + error;
                                 }
                             }
                             if (message.conversationalSearchResult != null && message.hasOwnProperty("conversationalSearchResult")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.verify(message.conversationalSearchResult);
+                                var error = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.verify(message.conversationalSearchResult, long + 1);
                                 if (error)
                                     return "conversationalSearchResult." + error;
                             }
                             if (message.tileNavigationResult != null && message.hasOwnProperty("tileNavigationResult")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult.verify(message.tileNavigationResult);
+                                var error = $root.google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult.verify(message.tileNavigationResult, long + 1);
                                 if (error)
                                     return "tileNavigationResult." + error;
                             }
@@ -97770,9 +101931,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.SearchResponse} SearchResponse
                          */
-                        SearchResponse.fromObject = function fromObject(object) {
+                        SearchResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.SearchResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.SearchResponse();
                             if (object.results) {
                                 if (!Array.isArray(object.results))
@@ -97781,7 +101946,7 @@
                                 for (var i = 0; i < object.results.length; ++i) {
                                     if (typeof object.results[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.results: object expected");
-                                    message.results[i] = $root.google.cloud.retail.v2alpha.SearchResponse.SearchResult.fromObject(object.results[i]);
+                                    message.results[i] = $root.google.cloud.retail.v2alpha.SearchResponse.SearchResult.fromObject(object.results[i], long + 1);
                                 }
                             }
                             if (object.facets) {
@@ -97791,7 +101956,7 @@
                                 for (var i = 0; i < object.facets.length; ++i) {
                                     if (typeof object.facets[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.facets: object expected");
-                                    message.facets[i] = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.fromObject(object.facets[i]);
+                                    message.facets[i] = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.fromObject(object.facets[i], long + 1);
                                 }
                             }
                             if (object.totalSize != null)
@@ -97805,7 +101970,7 @@
                             if (object.queryExpansionInfo != null) {
                                 if (typeof object.queryExpansionInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.queryExpansionInfo: object expected");
-                                message.queryExpansionInfo = $root.google.cloud.retail.v2alpha.SearchResponse.QueryExpansionInfo.fromObject(object.queryExpansionInfo);
+                                message.queryExpansionInfo = $root.google.cloud.retail.v2alpha.SearchResponse.QueryExpansionInfo.fromObject(object.queryExpansionInfo, long + 1);
                             }
                             if (object.redirectUri != null)
                                 message.redirectUri = String(object.redirectUri);
@@ -97819,7 +101984,7 @@
                             if (object.pinControlMetadata != null) {
                                 if (typeof object.pinControlMetadata !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.pinControlMetadata: object expected");
-                                message.pinControlMetadata = $root.google.cloud.retail.v2alpha.PinControlMetadata.fromObject(object.pinControlMetadata);
+                                message.pinControlMetadata = $root.google.cloud.retail.v2alpha.PinControlMetadata.fromObject(object.pinControlMetadata, long + 1);
                             }
                             if (object.invalidConditionBoostSpecs) {
                                 if (!Array.isArray(object.invalidConditionBoostSpecs))
@@ -97828,7 +101993,7 @@
                                 for (var i = 0; i < object.invalidConditionBoostSpecs.length; ++i) {
                                     if (typeof object.invalidConditionBoostSpecs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.invalidConditionBoostSpecs: object expected");
-                                    message.invalidConditionBoostSpecs[i] = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.invalidConditionBoostSpecs[i]);
+                                    message.invalidConditionBoostSpecs[i] = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.invalidConditionBoostSpecs[i], long + 1);
                                 }
                             }
                             if (object.experimentInfo) {
@@ -97838,18 +102003,18 @@
                                 for (var i = 0; i < object.experimentInfo.length; ++i) {
                                     if (typeof object.experimentInfo[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.experimentInfo: object expected");
-                                    message.experimentInfo[i] = $root.google.cloud.retail.v2alpha.ExperimentInfo.fromObject(object.experimentInfo[i]);
+                                    message.experimentInfo[i] = $root.google.cloud.retail.v2alpha.ExperimentInfo.fromObject(object.experimentInfo[i], long + 1);
                                 }
                             }
                             if (object.conversationalSearchResult != null) {
                                 if (typeof object.conversationalSearchResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.conversationalSearchResult: object expected");
-                                message.conversationalSearchResult = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.fromObject(object.conversationalSearchResult);
+                                message.conversationalSearchResult = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.fromObject(object.conversationalSearchResult, long + 1);
                             }
                             if (object.tileNavigationResult != null) {
                                 if (typeof object.tileNavigationResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.tileNavigationResult: object expected");
-                                message.tileNavigationResult = $root.google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult.fromObject(object.tileNavigationResult);
+                                message.tileNavigationResult = $root.google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult.fromObject(object.tileNavigationResult, long + 1);
                             }
                             return message;
                         };
@@ -97987,7 +102152,7 @@
                                 this.modelScores = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -98122,9 +102287,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SearchResult.decode = function decode(reader, length, error) {
+                            SearchResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchResponse.SearchResult(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -98136,7 +102305,7 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.product = $root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32());
+                                            message.product = $root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -98156,13 +102325,15 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                                    value = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.matchingVariantFields, key);
                                             message.matchingVariantFields[key] = value;
                                             break;
                                         }
@@ -98179,13 +102350,15 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32());
+                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.variantRollupValues, key);
                                             message.variantRollupValues[key] = value;
                                             break;
                                         }
@@ -98208,18 +102381,20 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.cloud.retail.v2alpha.DoubleList.decode(reader, reader.uint32());
+                                                    value = $root.google.cloud.retail.v2alpha.DoubleList.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.modelScores, key);
                                             message.modelScores[key] = value;
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -98250,14 +102425,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SearchResult.verify = function verify(message) {
+                            SearchResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.id != null && message.hasOwnProperty("id"))
                                     if (!$util.isString(message.id))
                                         return "id: string expected";
                                 if (message.product != null && message.hasOwnProperty("product")) {
-                                    var error = $root.google.cloud.retail.v2alpha.Product.verify(message.product);
+                                    var error = $root.google.cloud.retail.v2alpha.Product.verify(message.product, long + 1);
                                     if (error)
                                         return "product." + error;
                                 }
@@ -98269,7 +102448,7 @@
                                         return "matchingVariantFields: object expected";
                                     var key = Object.keys(message.matchingVariantFields);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.protobuf.FieldMask.verify(message.matchingVariantFields[key[i]]);
+                                        var error = $root.google.protobuf.FieldMask.verify(message.matchingVariantFields[key[i]], long + 1);
                                         if (error)
                                             return "matchingVariantFields." + error;
                                     }
@@ -98279,7 +102458,7 @@
                                         return "variantRollupValues: object expected";
                                     var key = Object.keys(message.variantRollupValues);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.protobuf.Value.verify(message.variantRollupValues[key[i]]);
+                                        var error = $root.google.protobuf.Value.verify(message.variantRollupValues[key[i]], long + 1);
                                         if (error)
                                             return "variantRollupValues." + error;
                                     }
@@ -98296,7 +102475,7 @@
                                         return "modelScores: object expected";
                                     var key = Object.keys(message.modelScores);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.DoubleList.verify(message.modelScores[key[i]]);
+                                        var error = $root.google.cloud.retail.v2alpha.DoubleList.verify(message.modelScores[key[i]], long + 1);
                                         if (error)
                                             return "modelScores." + error;
                                     }
@@ -98312,16 +102491,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchResponse.SearchResult} SearchResult
                              */
-                            SearchResult.fromObject = function fromObject(object) {
+                            SearchResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchResponse.SearchResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchResponse.SearchResult();
                                 if (object.id != null)
                                     message.id = String(object.id);
                                 if (object.product != null) {
                                     if (typeof object.product !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.SearchResult.product: object expected");
-                                    message.product = $root.google.cloud.retail.v2alpha.Product.fromObject(object.product);
+                                    message.product = $root.google.cloud.retail.v2alpha.Product.fromObject(object.product, long + 1);
                                 }
                                 if (object.matchingVariantCount != null)
                                     message.matchingVariantCount = object.matchingVariantCount | 0;
@@ -98330,9 +102513,11 @@
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.SearchResult.matchingVariantFields: object expected");
                                     message.matchingVariantFields = {};
                                     for (var keys = Object.keys(object.matchingVariantFields), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.matchingVariantFields, keys[i]);
                                         if (typeof object.matchingVariantFields[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.SearchResult.matchingVariantFields: object expected");
-                                        message.matchingVariantFields[keys[i]] = $root.google.protobuf.FieldMask.fromObject(object.matchingVariantFields[keys[i]]);
+                                        message.matchingVariantFields[keys[i]] = $root.google.protobuf.FieldMask.fromObject(object.matchingVariantFields[keys[i]], long + 1);
                                     }
                                 }
                                 if (object.variantRollupValues) {
@@ -98340,9 +102525,11 @@
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.SearchResult.variantRollupValues: object expected");
                                     message.variantRollupValues = {};
                                     for (var keys = Object.keys(object.variantRollupValues), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.variantRollupValues, keys[i]);
                                         if (typeof object.variantRollupValues[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.SearchResult.variantRollupValues: object expected");
-                                        message.variantRollupValues[keys[i]] = $root.google.protobuf.Value.fromObject(object.variantRollupValues[keys[i]]);
+                                        message.variantRollupValues[keys[i]] = $root.google.protobuf.Value.fromObject(object.variantRollupValues[keys[i]], long + 1);
                                     }
                                 }
                                 if (object.personalLabels) {
@@ -98357,9 +102544,11 @@
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.SearchResult.modelScores: object expected");
                                     message.modelScores = {};
                                     for (var keys = Object.keys(object.modelScores), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.modelScores, keys[i]);
                                         if (typeof object.modelScores[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.SearchResult.modelScores: object expected");
-                                        message.modelScores[keys[i]] = $root.google.cloud.retail.v2alpha.DoubleList.fromObject(object.modelScores[keys[i]]);
+                                        message.modelScores[keys[i]] = $root.google.cloud.retail.v2alpha.DoubleList.fromObject(object.modelScores[keys[i]], long + 1);
                                     }
                                 }
                                 return message;
@@ -98399,13 +102588,19 @@
                                 var keys2;
                                 if (message.matchingVariantFields && (keys2 = Object.keys(message.matchingVariantFields)).length) {
                                     object.matchingVariantFields = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.matchingVariantFields, keys2[j]);
                                         object.matchingVariantFields[keys2[j]] = $root.google.protobuf.FieldMask.toObject(message.matchingVariantFields[keys2[j]], options);
+                                    }
                                 }
                                 if (message.variantRollupValues && (keys2 = Object.keys(message.variantRollupValues)).length) {
                                     object.variantRollupValues = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.variantRollupValues, keys2[j]);
                                         object.variantRollupValues[keys2[j]] = $root.google.protobuf.Value.toObject(message.variantRollupValues[keys2[j]], options);
+                                    }
                                 }
                                 if (message.personalLabels && message.personalLabels.length) {
                                     object.personalLabels = [];
@@ -98414,8 +102609,11 @@
                                 }
                                 if (message.modelScores && (keys2 = Object.keys(message.modelScores)).length) {
                                     object.modelScores = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.modelScores, keys2[j]);
                                         object.modelScores[keys2[j]] = $root.google.cloud.retail.v2alpha.DoubleList.toObject(message.modelScores[keys2[j]], options);
+                                    }
                                 }
                                 return object;
                             };
@@ -98472,7 +102670,7 @@
                                 this.values = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -98558,9 +102756,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            Facet.decode = function decode(reader, length, error) {
+                            Facet.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchResponse.Facet();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -98574,7 +102776,7 @@
                                     case 2: {
                                             if (!(message.values && message.values.length))
                                                 message.values = [];
-                                            message.values.push($root.google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue.decode(reader, reader.uint32()));
+                                            message.values.push($root.google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 3: {
@@ -98582,7 +102784,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -98613,9 +102815,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            Facet.verify = function verify(message) {
+                            Facet.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.key != null && message.hasOwnProperty("key"))
                                     if (!$util.isString(message.key))
                                         return "key: string expected";
@@ -98623,7 +102829,7 @@
                                     if (!Array.isArray(message.values))
                                         return "values: array expected";
                                     for (var i = 0; i < message.values.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue.verify(message.values[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue.verify(message.values[i], long + 1);
                                         if (error)
                                             return "values." + error;
                                     }
@@ -98642,9 +102848,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchResponse.Facet} Facet
                              */
-                            Facet.fromObject = function fromObject(object) {
+                            Facet.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchResponse.Facet)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchResponse.Facet();
                                 if (object.key != null)
                                     message.key = String(object.key);
@@ -98655,7 +102865,7 @@
                                     for (var i = 0; i < object.values.length; ++i) {
                                         if (typeof object.values[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.Facet.values: object expected");
-                                        message.values[i] = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue.fromObject(object.values[i]);
+                                        message.values[i] = $root.google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue.fromObject(object.values[i], long + 1);
                                     }
                                 }
                                 if (object.dynamicFacet != null)
@@ -98744,7 +102954,7 @@
                                 function FacetValue(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -98863,9 +103073,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FacetValue.decode = function decode(reader, length, error) {
+                                FacetValue.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -98877,7 +103091,7 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.interval = $root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32());
+                                                message.interval = $root.google.cloud.retail.v2alpha.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         case 3: {
@@ -98893,7 +103107,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -98924,9 +103138,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FacetValue.verify = function verify(message) {
+                                FacetValue.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.value != null && message.hasOwnProperty("value")) {
                                         properties.facetValue = 1;
@@ -98938,7 +103156,7 @@
                                             return "facetValue: multiple values";
                                         properties.facetValue = 1;
                                         {
-                                            var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.interval);
+                                            var error = $root.google.cloud.retail.v2alpha.Interval.verify(message.interval, long + 1);
                                             if (error)
                                                 return "interval." + error;
                                         }
@@ -98963,16 +103181,20 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue} FacetValue
                                  */
-                                FacetValue.fromObject = function fromObject(object) {
+                                FacetValue.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue();
                                     if (object.value != null)
                                         message.value = String(object.value);
                                     if (object.interval != null) {
                                         if (typeof object.interval !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.Facet.FacetValue.interval: object expected");
-                                        message.interval = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.interval);
+                                        message.interval = $root.google.cloud.retail.v2alpha.Interval.fromObject(object.interval, long + 1);
                                     }
                                     if (object.count != null)
                                         if ($util.Long)
@@ -99087,7 +103309,7 @@
                             function QueryExpansionInfo(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -99162,9 +103384,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            QueryExpansionInfo.decode = function decode(reader, length, error) {
+                            QueryExpansionInfo.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchResponse.QueryExpansionInfo();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -99180,7 +103406,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -99211,9 +103437,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            QueryExpansionInfo.verify = function verify(message) {
+                            QueryExpansionInfo.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.expandedQuery != null && message.hasOwnProperty("expandedQuery"))
                                     if (typeof message.expandedQuery !== "boolean")
                                         return "expandedQuery: boolean expected";
@@ -99231,9 +103461,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchResponse.QueryExpansionInfo} QueryExpansionInfo
                              */
-                            QueryExpansionInfo.fromObject = function fromObject(object) {
+                            QueryExpansionInfo.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchResponse.QueryExpansionInfo)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchResponse.QueryExpansionInfo();
                                 if (object.expandedQuery != null)
                                     message.expandedQuery = Boolean(object.expandedQuery);
@@ -99336,7 +103570,7 @@
                                 this.suggestedAnswers = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -99453,9 +103687,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalSearchResult.decode = function decode(reader, length, error) {
+                            ConversationalSearchResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -99473,7 +103711,7 @@
                                     case 3: {
                                             if (!(message.additionalFilters && message.additionalFilters.length))
                                                 message.additionalFilters = [];
-                                            message.additionalFilters.push($root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32()));
+                                            message.additionalFilters.push($root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 4: {
@@ -99483,15 +103721,15 @@
                                     case 5: {
                                             if (!(message.suggestedAnswers && message.suggestedAnswers.length))
                                                 message.suggestedAnswers = [];
-                                            message.suggestedAnswers.push($root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer.decode(reader, reader.uint32()));
+                                            message.suggestedAnswers.push($root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 6: {
-                                            message.additionalFilter = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32());
+                                            message.additionalFilter = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -99522,9 +103760,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalSearchResult.verify = function verify(message) {
+                            ConversationalSearchResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.conversationId != null && message.hasOwnProperty("conversationId"))
                                     if (!$util.isString(message.conversationId))
                                         return "conversationId: string expected";
@@ -99535,7 +103777,7 @@
                                     if (!Array.isArray(message.additionalFilters))
                                         return "additionalFilters: array expected";
                                     for (var i = 0; i < message.additionalFilters.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilters[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilters[i], long + 1);
                                         if (error)
                                             return "additionalFilters." + error;
                                     }
@@ -99547,13 +103789,13 @@
                                     if (!Array.isArray(message.suggestedAnswers))
                                         return "suggestedAnswers: array expected";
                                     for (var i = 0; i < message.suggestedAnswers.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer.verify(message.suggestedAnswers[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer.verify(message.suggestedAnswers[i], long + 1);
                                         if (error)
                                             return "suggestedAnswers." + error;
                                     }
                                 }
                                 if (message.additionalFilter != null && message.hasOwnProperty("additionalFilter")) {
-                                    var error = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilter);
+                                    var error = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilter, long + 1);
                                     if (error)
                                         return "additionalFilter." + error;
                                 }
@@ -99568,9 +103810,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult} ConversationalSearchResult
                              */
-                            ConversationalSearchResult.fromObject = function fromObject(object) {
+                            ConversationalSearchResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult();
                                 if (object.conversationId != null)
                                     message.conversationId = String(object.conversationId);
@@ -99583,7 +103829,7 @@
                                     for (var i = 0; i < object.additionalFilters.length; ++i) {
                                         if (typeof object.additionalFilters[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.additionalFilters: object expected");
-                                        message.additionalFilters[i] = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilters[i]);
+                                        message.additionalFilters[i] = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilters[i], long + 1);
                                     }
                                 }
                                 if (object.followupQuestion != null)
@@ -99595,13 +103841,13 @@
                                     for (var i = 0; i < object.suggestedAnswers.length; ++i) {
                                         if (typeof object.suggestedAnswers[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.suggestedAnswers: object expected");
-                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer.fromObject(object.suggestedAnswers[i]);
+                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer.fromObject(object.suggestedAnswers[i], long + 1);
                                     }
                                 }
                                 if (object.additionalFilter != null) {
                                     if (typeof object.additionalFilter !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.additionalFilter: object expected");
-                                    message.additionalFilter = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilter);
+                                    message.additionalFilter = $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilter, long + 1);
                                 }
                                 return message;
                             };
@@ -99696,7 +103942,7 @@
                                 function SuggestedAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -99761,9 +104007,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                SuggestedAnswer.decode = function decode(reader, length, error) {
+                                SuggestedAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -99771,11 +104021,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -99806,11 +104056,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                SuggestedAnswer.verify = function verify(message) {
+                                SuggestedAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -99825,14 +104079,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer} SuggestedAnswer
                                  */
-                                SuggestedAnswer.fromObject = function fromObject(object) {
+                                SuggestedAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.SuggestedAnswer.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -99906,7 +104164,7 @@
                                 function AdditionalFilter(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -99971,9 +104229,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                AdditionalFilter.decode = function decode(reader, length, error) {
+                                AdditionalFilter.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -99981,11 +104243,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -100016,11 +104278,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                AdditionalFilter.verify = function verify(message) {
+                                AdditionalFilter.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -100035,14 +104301,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter} AdditionalFilter
                                  */
-                                AdditionalFilter.fromObject = function fromObject(object) {
+                                AdditionalFilter.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.ConversationalSearchResult.AdditionalFilter.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -100120,7 +104390,7 @@
                                 this.tiles = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -100186,9 +104456,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TileNavigationResult.decode = function decode(reader, length, error) {
+                            TileNavigationResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -100198,11 +104472,11 @@
                                     case 1: {
                                             if (!(message.tiles && message.tiles.length))
                                                 message.tiles = [];
-                                            message.tiles.push($root.google.cloud.retail.v2alpha.Tile.decode(reader, reader.uint32()));
+                                            message.tiles.push($root.google.cloud.retail.v2alpha.Tile.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -100233,14 +104507,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TileNavigationResult.verify = function verify(message) {
+                            TileNavigationResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.tiles != null && message.hasOwnProperty("tiles")) {
                                     if (!Array.isArray(message.tiles))
                                         return "tiles: array expected";
                                     for (var i = 0; i < message.tiles.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.Tile.verify(message.tiles[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.Tile.verify(message.tiles[i], long + 1);
                                         if (error)
                                             return "tiles." + error;
                                     }
@@ -100256,9 +104534,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult} TileNavigationResult
                              */
-                            TileNavigationResult.fromObject = function fromObject(object) {
+                            TileNavigationResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult();
                                 if (object.tiles) {
                                     if (!Array.isArray(object.tiles))
@@ -100267,7 +104549,7 @@
                                     for (var i = 0; i < object.tiles.length; ++i) {
                                         if (typeof object.tiles[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.SearchResponse.TileNavigationResult.tiles: object expected");
-                                        message.tiles[i] = $root.google.cloud.retail.v2alpha.Tile.fromObject(object.tiles[i]);
+                                        message.tiles[i] = $root.google.cloud.retail.v2alpha.Tile.fromObject(object.tiles[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -100349,7 +104631,7 @@
                         function ExperimentInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -100438,9 +104720,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExperimentInfo.decode = function decode(reader, length, error) {
+                        ExperimentInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ExperimentInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -100448,7 +104734,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.servingConfigExperiment = $root.google.cloud.retail.v2alpha.ExperimentInfo.ServingConfigExperiment.decode(reader, reader.uint32());
+                                        message.servingConfigExperiment = $root.google.cloud.retail.v2alpha.ExperimentInfo.ServingConfigExperiment.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
@@ -100456,7 +104742,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -100487,14 +104773,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExperimentInfo.verify = function verify(message) {
+                        ExperimentInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.servingConfigExperiment != null && message.hasOwnProperty("servingConfigExperiment")) {
                                 properties.experimentMetadata = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.ExperimentInfo.ServingConfigExperiment.verify(message.servingConfigExperiment);
+                                    var error = $root.google.cloud.retail.v2alpha.ExperimentInfo.ServingConfigExperiment.verify(message.servingConfigExperiment, long + 1);
                                     if (error)
                                         return "servingConfigExperiment." + error;
                                 }
@@ -100513,14 +104803,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ExperimentInfo} ExperimentInfo
                          */
-                        ExperimentInfo.fromObject = function fromObject(object) {
+                        ExperimentInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ExperimentInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ExperimentInfo();
                             if (object.servingConfigExperiment != null) {
                                 if (typeof object.servingConfigExperiment !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ExperimentInfo.servingConfigExperiment: object expected");
-                                message.servingConfigExperiment = $root.google.cloud.retail.v2alpha.ExperimentInfo.ServingConfigExperiment.fromObject(object.servingConfigExperiment);
+                                message.servingConfigExperiment = $root.google.cloud.retail.v2alpha.ExperimentInfo.ServingConfigExperiment.fromObject(object.servingConfigExperiment, long + 1);
                             }
                             if (object.experiment != null)
                                 message.experiment = String(object.experiment);
@@ -100599,7 +104893,7 @@
                             function ServingConfigExperiment(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -100674,9 +104968,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ServingConfigExperiment.decode = function decode(reader, length, error) {
+                            ServingConfigExperiment.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ExperimentInfo.ServingConfigExperiment();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -100692,7 +104990,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -100723,9 +105021,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ServingConfigExperiment.verify = function verify(message) {
+                            ServingConfigExperiment.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.originalServingConfig != null && message.hasOwnProperty("originalServingConfig"))
                                     if (!$util.isString(message.originalServingConfig))
                                         return "originalServingConfig: string expected";
@@ -100743,9 +105045,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.ExperimentInfo.ServingConfigExperiment} ServingConfigExperiment
                              */
-                            ServingConfigExperiment.fromObject = function fromObject(object) {
+                            ServingConfigExperiment.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.ExperimentInfo.ServingConfigExperiment)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.ExperimentInfo.ServingConfigExperiment();
                                 if (object.originalServingConfig != null)
                                     message.originalServingConfig = String(object.originalServingConfig);
@@ -100839,7 +105145,7 @@
                             this.searchSolutionUseCase = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -100987,9 +105293,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Control.decode = function decode(reader, length, error) {
+                        Control.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Control();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -100997,11 +105307,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 3: {
-                                        message.facetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.decode(reader, reader.uint32());
+                                        message.facetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.rule = $root.google.cloud.retail.v2alpha.Rule.decode(reader, reader.uint32());
+                                        message.rule = $root.google.cloud.retail.v2alpha.Rule.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
@@ -101041,7 +105351,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -101072,14 +105382,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Control.verify = function verify(message) {
+                        Control.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.facetSpec != null && message.hasOwnProperty("facetSpec")) {
                                 properties.control = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.verify(message.facetSpec);
+                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.verify(message.facetSpec, long + 1);
                                     if (error)
                                         return "facetSpec." + error;
                                 }
@@ -101089,7 +105403,7 @@
                                     return "control: multiple values";
                                 properties.control = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Rule.verify(message.rule);
+                                    var error = $root.google.cloud.retail.v2alpha.Rule.verify(message.rule, long + 1);
                                     if (error)
                                         return "rule." + error;
                                 }
@@ -101144,19 +105458,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Control} Control
                          */
-                        Control.fromObject = function fromObject(object) {
+                        Control.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Control)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Control();
                             if (object.facetSpec != null) {
                                 if (typeof object.facetSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Control.facetSpec: object expected");
-                                message.facetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.fromObject(object.facetSpec);
+                                message.facetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.FacetSpec.fromObject(object.facetSpec, long + 1);
                             }
                             if (object.rule != null) {
                                 if (typeof object.rule !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Control.rule: object expected");
-                                message.rule = $root.google.cloud.retail.v2alpha.Rule.fromObject(object.rule);
+                                message.rule = $root.google.cloud.retail.v2alpha.Rule.fromObject(object.rule, long + 1);
                             }
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -101527,7 +105845,7 @@
                         function CreateControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -101612,9 +105930,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateControlRequest.decode = function decode(reader, length, error) {
+                        CreateControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CreateControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -101626,7 +105948,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.control = $root.google.cloud.retail.v2alpha.Control.decode(reader, reader.uint32());
+                                        message.control = $root.google.cloud.retail.v2alpha.Control.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -101634,7 +105956,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -101665,14 +105987,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateControlRequest.verify = function verify(message) {
+                        CreateControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.control != null && message.hasOwnProperty("control")) {
-                                var error = $root.google.cloud.retail.v2alpha.Control.verify(message.control);
+                                var error = $root.google.cloud.retail.v2alpha.Control.verify(message.control, long + 1);
                                 if (error)
                                     return "control." + error;
                             }
@@ -101690,16 +106016,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CreateControlRequest} CreateControlRequest
                          */
-                        CreateControlRequest.fromObject = function fromObject(object) {
+                        CreateControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CreateControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CreateControlRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.control != null) {
                                 if (typeof object.control !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CreateControlRequest.control: object expected");
-                                message.control = $root.google.cloud.retail.v2alpha.Control.fromObject(object.control);
+                                message.control = $root.google.cloud.retail.v2alpha.Control.fromObject(object.control, long + 1);
                             }
                             if (object.controlId != null)
                                 message.controlId = String(object.controlId);
@@ -101783,7 +106113,7 @@
                         function UpdateControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -101858,9 +106188,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateControlRequest.decode = function decode(reader, length, error) {
+                        UpdateControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -101868,15 +106202,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.control = $root.google.cloud.retail.v2alpha.Control.decode(reader, reader.uint32());
+                                        message.control = $root.google.cloud.retail.v2alpha.Control.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -101907,16 +106241,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateControlRequest.verify = function verify(message) {
+                        UpdateControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.control != null && message.hasOwnProperty("control")) {
-                                var error = $root.google.cloud.retail.v2alpha.Control.verify(message.control);
+                                var error = $root.google.cloud.retail.v2alpha.Control.verify(message.control, long + 1);
                                 if (error)
                                     return "control." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -101931,19 +106269,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateControlRequest} UpdateControlRequest
                          */
-                        UpdateControlRequest.fromObject = function fromObject(object) {
+                        UpdateControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateControlRequest();
                             if (object.control != null) {
                                 if (typeof object.control !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateControlRequest.control: object expected");
-                                message.control = $root.google.cloud.retail.v2alpha.Control.fromObject(object.control);
+                                message.control = $root.google.cloud.retail.v2alpha.Control.fromObject(object.control, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateControlRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -102021,7 +106363,7 @@
                         function DeleteControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -102086,9 +106428,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteControlRequest.decode = function decode(reader, length, error) {
+                        DeleteControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.DeleteControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -102100,7 +106446,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -102131,9 +106477,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteControlRequest.verify = function verify(message) {
+                        DeleteControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -102148,9 +106498,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.DeleteControlRequest} DeleteControlRequest
                          */
-                        DeleteControlRequest.fromObject = function fromObject(object) {
+                        DeleteControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.DeleteControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.DeleteControlRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -102226,7 +106580,7 @@
                         function GetControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -102291,9 +106645,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetControlRequest.decode = function decode(reader, length, error) {
+                        GetControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -102305,7 +106663,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -102336,9 +106694,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetControlRequest.verify = function verify(message) {
+                        GetControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -102353,9 +106715,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetControlRequest} GetControlRequest
                          */
-                        GetControlRequest.fromObject = function fromObject(object) {
+                        GetControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetControlRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -102434,7 +106800,7 @@
                         function ListControlsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -102529,9 +106895,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListControlsRequest.decode = function decode(reader, length, error) {
+                        ListControlsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListControlsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -102555,7 +106925,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -102586,9 +106956,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListControlsRequest.verify = function verify(message) {
+                        ListControlsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -102612,9 +106986,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListControlsRequest} ListControlsRequest
                          */
-                        ListControlsRequest.fromObject = function fromObject(object) {
+                        ListControlsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListControlsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListControlsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -102708,7 +107086,7 @@
                             this.controls = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -102784,9 +107162,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListControlsResponse.decode = function decode(reader, length, error) {
+                        ListControlsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListControlsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -102796,7 +107178,7 @@
                                 case 1: {
                                         if (!(message.controls && message.controls.length))
                                             message.controls = [];
-                                        message.controls.push($root.google.cloud.retail.v2alpha.Control.decode(reader, reader.uint32()));
+                                        message.controls.push($root.google.cloud.retail.v2alpha.Control.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -102804,7 +107186,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -102835,14 +107217,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListControlsResponse.verify = function verify(message) {
+                        ListControlsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.controls != null && message.hasOwnProperty("controls")) {
                                 if (!Array.isArray(message.controls))
                                     return "controls: array expected";
                                 for (var i = 0; i < message.controls.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Control.verify(message.controls[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Control.verify(message.controls[i], long + 1);
                                     if (error)
                                         return "controls." + error;
                                 }
@@ -102861,9 +107247,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListControlsResponse} ListControlsResponse
                          */
-                        ListControlsResponse.fromObject = function fromObject(object) {
+                        ListControlsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListControlsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListControlsResponse();
                             if (object.controls) {
                                 if (!Array.isArray(object.controls))
@@ -102872,7 +107262,7 @@
                                 for (var i = 0; i < object.controls.length; ++i) {
                                     if (typeof object.controls[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ListControlsResponse.controls: object expected");
-                                    message.controls[i] = $root.google.cloud.retail.v2alpha.Control.fromObject(object.controls[i]);
+                                    message.controls[i] = $root.google.cloud.retail.v2alpha.Control.fromObject(object.controls[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -103037,7 +107427,7 @@
                             this.safetySettings = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -103205,9 +107595,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ConversationalSearchRequest.decode = function decode(reader, length, error) {
+                        ConversationalSearchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchRequest(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -103237,7 +107631,7 @@
                                         break;
                                     }
                                 case 6: {
-                                        message.searchParams = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams.decode(reader, reader.uint32());
+                                        message.searchParams = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
@@ -103245,11 +107639,11 @@
                                         break;
                                     }
                                 case 7: {
-                                        message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.decode(reader, reader.uint32());
+                                        message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.conversationalFilteringSpec = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec.decode(reader, reader.uint32());
+                                        message.conversationalFilteringSpec = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 12: {
@@ -103268,21 +107662,23 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.userLabels, key);
                                         message.userLabels[key] = value;
                                         break;
                                     }
                                 case 14: {
                                         if (!(message.safetySettings && message.safetySettings.length))
                                             message.safetySettings = [];
-                                        message.safetySettings.push($root.google.cloud.retail.v2alpha.SafetySetting.decode(reader, reader.uint32()));
+                                        message.safetySettings.push($root.google.cloud.retail.v2alpha.SafetySetting.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -103313,9 +107709,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ConversationalSearchRequest.verify = function verify(message) {
+                        ConversationalSearchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.placement != null && message.hasOwnProperty("placement"))
                                 if (!$util.isString(message.placement))
                                     return "placement: string expected";
@@ -103336,7 +107736,7 @@
                                 if (!$util.isString(message.conversationId))
                                     return "conversationId: string expected";
                             if (message.searchParams != null && message.hasOwnProperty("searchParams")) {
-                                var error = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams.verify(message.searchParams);
+                                var error = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams.verify(message.searchParams, long + 1);
                                 if (error)
                                     return "searchParams." + error;
                             }
@@ -103344,12 +107744,12 @@
                                 if (!$util.isString(message.visitorId))
                                     return "visitorId: string expected";
                             if (message.userInfo != null && message.hasOwnProperty("userInfo")) {
-                                var error = $root.google.cloud.retail.v2alpha.UserInfo.verify(message.userInfo);
+                                var error = $root.google.cloud.retail.v2alpha.UserInfo.verify(message.userInfo, long + 1);
                                 if (error)
                                     return "userInfo." + error;
                             }
                             if (message.conversationalFilteringSpec != null && message.hasOwnProperty("conversationalFilteringSpec")) {
-                                var error = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec.verify(message.conversationalFilteringSpec);
+                                var error = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec.verify(message.conversationalFilteringSpec, long + 1);
                                 if (error)
                                     return "conversationalFilteringSpec." + error;
                             }
@@ -103365,7 +107765,7 @@
                                 if (!Array.isArray(message.safetySettings))
                                     return "safetySettings: array expected";
                                 for (var i = 0; i < message.safetySettings.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.SafetySetting.verify(message.safetySettings[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.SafetySetting.verify(message.safetySettings[i], long + 1);
                                     if (error)
                                         return "safetySettings." + error;
                                 }
@@ -103381,9 +107781,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ConversationalSearchRequest} ConversationalSearchRequest
                          */
-                        ConversationalSearchRequest.fromObject = function fromObject(object) {
+                        ConversationalSearchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchRequest();
                             if (object.placement != null)
                                 message.placement = String(object.placement);
@@ -103403,26 +107807,29 @@
                             if (object.searchParams != null) {
                                 if (typeof object.searchParams !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchRequest.searchParams: object expected");
-                                message.searchParams = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams.fromObject(object.searchParams);
+                                message.searchParams = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams.fromObject(object.searchParams, long + 1);
                             }
                             if (object.visitorId != null)
                                 message.visitorId = String(object.visitorId);
                             if (object.userInfo != null) {
                                 if (typeof object.userInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchRequest.userInfo: object expected");
-                                message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.fromObject(object.userInfo);
+                                message.userInfo = $root.google.cloud.retail.v2alpha.UserInfo.fromObject(object.userInfo, long + 1);
                             }
                             if (object.conversationalFilteringSpec != null) {
                                 if (typeof object.conversationalFilteringSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchRequest.conversationalFilteringSpec: object expected");
-                                message.conversationalFilteringSpec = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec.fromObject(object.conversationalFilteringSpec);
+                                message.conversationalFilteringSpec = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec.fromObject(object.conversationalFilteringSpec, long + 1);
                             }
                             if (object.userLabels) {
                                 if (typeof object.userLabels !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchRequest.userLabels: object expected");
                                 message.userLabels = {};
-                                for (var keys = Object.keys(object.userLabels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.userLabels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.userLabels, keys[i]);
                                     message.userLabels[keys[i]] = String(object.userLabels[keys[i]]);
+                                }
                             }
                             if (object.safetySettings) {
                                 if (!Array.isArray(object.safetySettings))
@@ -103431,7 +107838,7 @@
                                 for (var i = 0; i < object.safetySettings.length; ++i) {
                                     if (typeof object.safetySettings[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchRequest.safetySettings: object expected");
-                                    message.safetySettings[i] = $root.google.cloud.retail.v2alpha.SafetySetting.fromObject(object.safetySettings[i]);
+                                    message.safetySettings[i] = $root.google.cloud.retail.v2alpha.SafetySetting.fromObject(object.safetySettings[i], long + 1);
                                 }
                             }
                             return message;
@@ -103490,8 +107897,11 @@
                             var keys2;
                             if (message.userLabels && (keys2 = Object.keys(message.userLabels)).length) {
                                 object.userLabels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.userLabels, keys2[j]);
                                     object.userLabels[keys2[j]] = message.userLabels[keys2[j]];
+                                }
                             }
                             if (message.safetySettings && message.safetySettings.length) {
                                 object.safetySettings = [];
@@ -103550,7 +107960,7 @@
                             function SearchParams(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -103645,9 +108055,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SearchParams.decode = function decode(reader, length, error) {
+                            SearchParams.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -103667,11 +108081,11 @@
                                             break;
                                         }
                                     case 4: {
-                                            message.boostSpec = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.decode(reader, reader.uint32());
+                                            message.boostSpec = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -103702,9 +108116,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SearchParams.verify = function verify(message) {
+                            SearchParams.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.filter != null && message.hasOwnProperty("filter"))
                                     if (!$util.isString(message.filter))
                                         return "filter: string expected";
@@ -103715,7 +108133,7 @@
                                     if (!$util.isString(message.sortBy))
                                         return "sortBy: string expected";
                                 if (message.boostSpec != null && message.hasOwnProperty("boostSpec")) {
-                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.verify(message.boostSpec);
+                                    var error = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.verify(message.boostSpec, long + 1);
                                     if (error)
                                         return "boostSpec." + error;
                                 }
@@ -103730,9 +108148,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams} SearchParams
                              */
-                            SearchParams.fromObject = function fromObject(object) {
+                            SearchParams.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams();
                                 if (object.filter != null)
                                     message.filter = String(object.filter);
@@ -103743,7 +108165,7 @@
                                 if (object.boostSpec != null) {
                                     if (typeof object.boostSpec !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchRequest.SearchParams.boostSpec: object expected");
-                                    message.boostSpec = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.fromObject(object.boostSpec);
+                                    message.boostSpec = $root.google.cloud.retail.v2alpha.SearchRequest.BoostSpec.fromObject(object.boostSpec, long + 1);
                                 }
                                 return message;
                             };
@@ -103828,7 +108250,7 @@
                             function UserAnswer(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -103917,9 +108339,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            UserAnswer.decode = function decode(reader, length, error) {
+                            UserAnswer.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -103931,11 +108357,11 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.selectedAnswer = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer.decode(reader, reader.uint32());
+                                            message.selectedAnswer = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -103966,9 +108392,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            UserAnswer.verify = function verify(message) {
+                            UserAnswer.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.textAnswer != null && message.hasOwnProperty("textAnswer")) {
                                     properties.type = 1;
@@ -103980,7 +108410,7 @@
                                         return "type: multiple values";
                                     properties.type = 1;
                                     {
-                                        var error = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer.verify(message.selectedAnswer);
+                                        var error = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer.verify(message.selectedAnswer, long + 1);
                                         if (error)
                                             return "selectedAnswer." + error;
                                     }
@@ -103996,16 +108426,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer} UserAnswer
                              */
-                            UserAnswer.fromObject = function fromObject(object) {
+                            UserAnswer.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer();
                                 if (object.textAnswer != null)
                                     message.textAnswer = String(object.textAnswer);
                                 if (object.selectedAnswer != null) {
                                     if (typeof object.selectedAnswer !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.selectedAnswer: object expected");
-                                    message.selectedAnswer = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer);
+                                    message.selectedAnswer = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer, long + 1);
                                 }
                                 return message;
                             };
@@ -104082,7 +108516,7 @@
                                 function SelectedAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -104147,9 +108581,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                SelectedAnswer.decode = function decode(reader, length, error) {
+                                SelectedAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -104157,11 +108595,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -104192,11 +108630,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                SelectedAnswer.verify = function verify(message) {
+                                SelectedAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -104211,14 +108653,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer} SelectedAnswer
                                  */
-                                SelectedAnswer.fromObject = function fromObject(object) {
+                                SelectedAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.SelectedAnswer.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -104297,7 +108743,7 @@
                             function ConversationalFilteringSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -104382,9 +108828,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalFilteringSpec.decode = function decode(reader, length, error) {
+                            ConversationalFilteringSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -104396,7 +108846,7 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.userAnswer = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.decode(reader, reader.uint32());
+                                            message.userAnswer = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 4: {
@@ -104404,7 +108854,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -104435,14 +108885,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalFilteringSpec.verify = function verify(message) {
+                            ConversationalFilteringSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.enableConversationalFiltering != null && message.hasOwnProperty("enableConversationalFiltering"))
                                     if (typeof message.enableConversationalFiltering !== "boolean")
                                         return "enableConversationalFiltering: boolean expected";
                                 if (message.userAnswer != null && message.hasOwnProperty("userAnswer")) {
-                                    var error = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.verify(message.userAnswer);
+                                    var error = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.verify(message.userAnswer, long + 1);
                                     if (error)
                                         return "userAnswer." + error;
                                 }
@@ -104467,16 +108921,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec} ConversationalFilteringSpec
                              */
-                            ConversationalFilteringSpec.fromObject = function fromObject(object) {
+                            ConversationalFilteringSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec();
                                 if (object.enableConversationalFiltering != null)
                                     message.enableConversationalFiltering = Boolean(object.enableConversationalFiltering);
                                 if (object.userAnswer != null) {
                                     if (typeof object.userAnswer !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchRequest.ConversationalFilteringSpec.userAnswer: object expected");
-                                    message.userAnswer = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.fromObject(object.userAnswer);
+                                    message.userAnswer = $root.google.cloud.retail.v2alpha.ConversationalSearchRequest.UserAnswer.fromObject(object.userAnswer, long + 1);
                                 }
                                 switch (object.conversationalFilteringMode) {
                                 default:
@@ -104610,7 +109068,7 @@
                             this.refinedSearch = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -104737,9 +109195,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ConversationalSearchResponse.decode = function decode(reader, length, error) {
+                        ConversationalSearchResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -104757,7 +109219,7 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.followupQuestion = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32());
+                                        message.followupQuestion = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
@@ -104767,11 +109229,11 @@
                                 case 6: {
                                         if (!(message.refinedSearch && message.refinedSearch.length))
                                             message.refinedSearch = [];
-                                        message.refinedSearch.push($root.google.cloud.retail.v2alpha.ConversationalSearchResponse.RefinedSearch.decode(reader, reader.uint32()));
+                                        message.refinedSearch.push($root.google.cloud.retail.v2alpha.ConversationalSearchResponse.RefinedSearch.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 7: {
-                                        message.conversationalFilteringResult = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.decode(reader, reader.uint32());
+                                        message.conversationalFilteringResult = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
@@ -104779,7 +109241,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -104810,9 +109272,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ConversationalSearchResponse.verify = function verify(message) {
+                        ConversationalSearchResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.userQueryTypes != null && message.hasOwnProperty("userQueryTypes")) {
                                 if (!Array.isArray(message.userQueryTypes))
                                     return "userQueryTypes: array expected";
@@ -104824,7 +109290,7 @@
                                 if (!$util.isString(message.conversationalTextResponse))
                                     return "conversationalTextResponse: string expected";
                             if (message.followupQuestion != null && message.hasOwnProperty("followupQuestion")) {
-                                var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion);
+                                var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion, long + 1);
                                 if (error)
                                     return "followupQuestion." + error;
                             }
@@ -104835,13 +109301,13 @@
                                 if (!Array.isArray(message.refinedSearch))
                                     return "refinedSearch: array expected";
                                 for (var i = 0; i < message.refinedSearch.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.RefinedSearch.verify(message.refinedSearch[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.RefinedSearch.verify(message.refinedSearch[i], long + 1);
                                     if (error)
                                         return "refinedSearch." + error;
                                 }
                             }
                             if (message.conversationalFilteringResult != null && message.hasOwnProperty("conversationalFilteringResult")) {
-                                var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.verify(message.conversationalFilteringResult);
+                                var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.verify(message.conversationalFilteringResult, long + 1);
                                 if (error)
                                     return "conversationalFilteringResult." + error;
                             }
@@ -104865,9 +109331,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ConversationalSearchResponse} ConversationalSearchResponse
                          */
-                        ConversationalSearchResponse.fromObject = function fromObject(object) {
+                        ConversationalSearchResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse();
                             if (object.userQueryTypes) {
                                 if (!Array.isArray(object.userQueryTypes))
@@ -104881,7 +109351,7 @@
                             if (object.followupQuestion != null) {
                                 if (typeof object.followupQuestion !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchResponse.followupQuestion: object expected");
-                                message.followupQuestion = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion);
+                                message.followupQuestion = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion, long + 1);
                             }
                             if (object.conversationId != null)
                                 message.conversationId = String(object.conversationId);
@@ -104892,13 +109362,13 @@
                                 for (var i = 0; i < object.refinedSearch.length; ++i) {
                                     if (typeof object.refinedSearch[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchResponse.refinedSearch: object expected");
-                                    message.refinedSearch[i] = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.RefinedSearch.fromObject(object.refinedSearch[i]);
+                                    message.refinedSearch[i] = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.RefinedSearch.fromObject(object.refinedSearch[i], long + 1);
                                 }
                             }
                             if (object.conversationalFilteringResult != null) {
                                 if (typeof object.conversationalFilteringResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchResponse.conversationalFilteringResult: object expected");
-                                message.conversationalFilteringResult = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.fromObject(object.conversationalFilteringResult);
+                                message.conversationalFilteringResult = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.fromObject(object.conversationalFilteringResult, long + 1);
                             }
                             switch (object.state) {
                             default:
@@ -105018,7 +109488,7 @@
                                 this.suggestedAnswers = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -105094,9 +109564,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FollowupQuestion.decode = function decode(reader, length, error) {
+                            FollowupQuestion.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -105110,11 +109584,11 @@
                                     case 2: {
                                             if (!(message.suggestedAnswers && message.suggestedAnswers.length))
                                                 message.suggestedAnswers = [];
-                                            message.suggestedAnswers.push($root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.decode(reader, reader.uint32()));
+                                            message.suggestedAnswers.push($root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -105145,9 +109619,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FollowupQuestion.verify = function verify(message) {
+                            FollowupQuestion.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.followupQuestion != null && message.hasOwnProperty("followupQuestion"))
                                     if (!$util.isString(message.followupQuestion))
                                         return "followupQuestion: string expected";
@@ -105155,7 +109633,7 @@
                                     if (!Array.isArray(message.suggestedAnswers))
                                         return "suggestedAnswers: array expected";
                                     for (var i = 0; i < message.suggestedAnswers.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.verify(message.suggestedAnswers[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.verify(message.suggestedAnswers[i], long + 1);
                                         if (error)
                                             return "suggestedAnswers." + error;
                                     }
@@ -105171,9 +109649,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion} FollowupQuestion
                              */
-                            FollowupQuestion.fromObject = function fromObject(object) {
+                            FollowupQuestion.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion();
                                 if (object.followupQuestion != null)
                                     message.followupQuestion = String(object.followupQuestion);
@@ -105184,7 +109666,7 @@
                                     for (var i = 0; i < object.suggestedAnswers.length; ++i) {
                                         if (typeof object.suggestedAnswers[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.suggestedAnswers: object expected");
-                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.fromObject(object.suggestedAnswers[i]);
+                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.fromObject(object.suggestedAnswers[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -105263,7 +109745,7 @@
                                 function SuggestedAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -105328,9 +109810,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                SuggestedAnswer.decode = function decode(reader, length, error) {
+                                SuggestedAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -105338,11 +109824,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -105373,11 +109859,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                SuggestedAnswer.verify = function verify(message) {
+                                SuggestedAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -105392,14 +109882,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer} SuggestedAnswer
                                  */
-                                SuggestedAnswer.fromObject = function fromObject(object) {
+                                SuggestedAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -105476,7 +109970,7 @@
                             function RefinedSearch(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -105541,9 +110035,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RefinedSearch.decode = function decode(reader, length, error) {
+                            RefinedSearch.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.RefinedSearch();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -105555,7 +110053,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -105586,9 +110084,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RefinedSearch.verify = function verify(message) {
+                            RefinedSearch.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.query != null && message.hasOwnProperty("query"))
                                     if (!$util.isString(message.query))
                                         return "query: string expected";
@@ -105603,9 +110105,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.ConversationalSearchResponse.RefinedSearch} RefinedSearch
                              */
-                            RefinedSearch.fromObject = function fromObject(object) {
+                            RefinedSearch.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.RefinedSearch)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.RefinedSearch();
                                 if (object.query != null)
                                     message.query = String(object.query);
@@ -105682,7 +110188,7 @@
                             function ConversationalFilteringResult(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -105757,9 +110263,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalFilteringResult.decode = function decode(reader, length, error) {
+                            ConversationalFilteringResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -105767,15 +110277,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.followupQuestion = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32());
+                                            message.followupQuestion = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.additionalFilter = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.decode(reader, reader.uint32());
+                                            message.additionalFilter = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -105806,16 +110316,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalFilteringResult.verify = function verify(message) {
+                            ConversationalFilteringResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.followupQuestion != null && message.hasOwnProperty("followupQuestion")) {
-                                    var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion);
+                                    var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion, long + 1);
                                     if (error)
                                         return "followupQuestion." + error;
                                 }
                                 if (message.additionalFilter != null && message.hasOwnProperty("additionalFilter")) {
-                                    var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.verify(message.additionalFilter);
+                                    var error = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.verify(message.additionalFilter, long + 1);
                                     if (error)
                                         return "additionalFilter." + error;
                                 }
@@ -105830,19 +110344,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult} ConversationalFilteringResult
                              */
-                            ConversationalFilteringResult.fromObject = function fromObject(object) {
+                            ConversationalFilteringResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult();
                                 if (object.followupQuestion != null) {
                                     if (typeof object.followupQuestion !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.followupQuestion: object expected");
-                                    message.followupQuestion = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion);
+                                    message.followupQuestion = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion, long + 1);
                                 }
                                 if (object.additionalFilter != null) {
                                     if (typeof object.additionalFilter !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.additionalFilter: object expected");
-                                    message.additionalFilter = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.fromObject(object.additionalFilter);
+                                    message.additionalFilter = $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.fromObject(object.additionalFilter, long + 1);
                                 }
                                 return message;
                             };
@@ -105917,7 +110435,7 @@
                                 function AdditionalFilter(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -105982,9 +110500,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                AdditionalFilter.decode = function decode(reader, length, error) {
+                                AdditionalFilter.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -105992,11 +110514,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -106027,11 +110549,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                AdditionalFilter.verify = function verify(message) {
+                                AdditionalFilter.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2alpha.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -106046,14 +110572,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter} AdditionalFilter
                                  */
-                                AdditionalFilter.fromObject = function fromObject(object) {
+                                AdditionalFilter.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2alpha.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -106173,7 +110703,7 @@
                         function SafetySetting(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -106258,9 +110788,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SafetySetting.decode = function decode(reader, length, error) {
+                        SafetySetting.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SafetySetting();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -106280,7 +110814,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -106311,9 +110845,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SafetySetting.verify = function verify(message) {
+                        SafetySetting.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.category != null && message.hasOwnProperty("category"))
                                 switch (message.category) {
                                 default:
@@ -106358,9 +110896,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.SafetySetting} SafetySetting
                          */
-                        SafetySetting.fromObject = function fromObject(object) {
+                        SafetySetting.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.SafetySetting)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.SafetySetting();
                             switch (object.category) {
                             default:
@@ -106565,7 +111107,7 @@
                         function GenerativeQuestionsFeatureConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -106650,9 +111192,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GenerativeQuestionsFeatureConfig.decode = function decode(reader, length, error) {
+                        GenerativeQuestionsFeatureConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GenerativeQuestionsFeatureConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -106672,7 +111218,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -106703,9 +111249,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GenerativeQuestionsFeatureConfig.verify = function verify(message) {
+                        GenerativeQuestionsFeatureConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -106726,9 +111276,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GenerativeQuestionsFeatureConfig} GenerativeQuestionsFeatureConfig
                          */
-                        GenerativeQuestionsFeatureConfig.fromObject = function fromObject(object) {
+                        GenerativeQuestionsFeatureConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GenerativeQuestionsFeatureConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GenerativeQuestionsFeatureConfig();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -106822,7 +111376,7 @@
                             this.exampleValues = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -106948,9 +111502,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GenerativeQuestionConfig.decode = function decode(reader, length, error) {
+                        GenerativeQuestionConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -106988,7 +111546,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -107019,9 +111577,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GenerativeQuestionConfig.verify = function verify(message) {
+                        GenerativeQuestionConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -107058,9 +111620,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GenerativeQuestionConfig} GenerativeQuestionConfig
                          */
-                        GenerativeQuestionConfig.fromObject = function fromObject(object) {
+                        GenerativeQuestionConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -107377,7 +111943,7 @@
                         function UpdateGenerativeQuestionsFeatureConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -107452,9 +112018,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionsFeatureConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -107462,15 +112032,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2alpha.GenerativeQuestionsFeatureConfig.decode(reader, reader.uint32());
+                                        message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2alpha.GenerativeQuestionsFeatureConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -107501,16 +112071,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateGenerativeQuestionsFeatureConfigRequest.verify = function verify(message) {
+                        UpdateGenerativeQuestionsFeatureConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionsFeatureConfig != null && message.hasOwnProperty("generativeQuestionsFeatureConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.GenerativeQuestionsFeatureConfig.verify(message.generativeQuestionsFeatureConfig);
+                                var error = $root.google.cloud.retail.v2alpha.GenerativeQuestionsFeatureConfig.verify(message.generativeQuestionsFeatureConfig, long + 1);
                                 if (error)
                                     return "generativeQuestionsFeatureConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -107525,19 +112099,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateGenerativeQuestionsFeatureConfigRequest} UpdateGenerativeQuestionsFeatureConfigRequest
                          */
-                        UpdateGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object) {
+                        UpdateGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionsFeatureConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionsFeatureConfigRequest();
                             if (object.generativeQuestionsFeatureConfig != null) {
                                 if (typeof object.generativeQuestionsFeatureConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateGenerativeQuestionsFeatureConfigRequest.generativeQuestionsFeatureConfig: object expected");
-                                message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2alpha.GenerativeQuestionsFeatureConfig.fromObject(object.generativeQuestionsFeatureConfig);
+                                message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2alpha.GenerativeQuestionsFeatureConfig.fromObject(object.generativeQuestionsFeatureConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateGenerativeQuestionsFeatureConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -107615,7 +112193,7 @@
                         function GetGenerativeQuestionsFeatureConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -107680,9 +112258,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error) {
+                        GetGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetGenerativeQuestionsFeatureConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -107694,7 +112276,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -107725,9 +112307,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetGenerativeQuestionsFeatureConfigRequest.verify = function verify(message) {
+                        GetGenerativeQuestionsFeatureConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -107742,9 +112328,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetGenerativeQuestionsFeatureConfigRequest} GetGenerativeQuestionsFeatureConfigRequest
                          */
-                        GetGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object) {
+                        GetGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetGenerativeQuestionsFeatureConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetGenerativeQuestionsFeatureConfigRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -107820,7 +112410,7 @@
                         function ListGenerativeQuestionConfigsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -107885,9 +112475,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error) {
+                        ListGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListGenerativeQuestionConfigsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -107899,7 +112493,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -107930,9 +112524,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListGenerativeQuestionConfigsRequest.verify = function verify(message) {
+                        ListGenerativeQuestionConfigsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -107947,9 +112545,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListGenerativeQuestionConfigsRequest} ListGenerativeQuestionConfigsRequest
                          */
-                        ListGenerativeQuestionConfigsRequest.fromObject = function fromObject(object) {
+                        ListGenerativeQuestionConfigsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListGenerativeQuestionConfigsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListGenerativeQuestionConfigsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -108026,7 +112628,7 @@
                             this.generativeQuestionConfigs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -108092,9 +112694,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error) {
+                        ListGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListGenerativeQuestionConfigsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -108104,11 +112710,11 @@
                                 case 1: {
                                         if (!(message.generativeQuestionConfigs && message.generativeQuestionConfigs.length))
                                             message.generativeQuestionConfigs = [];
-                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.decode(reader, reader.uint32()));
+                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -108139,14 +112745,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListGenerativeQuestionConfigsResponse.verify = function verify(message) {
+                        ListGenerativeQuestionConfigsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionConfigs != null && message.hasOwnProperty("generativeQuestionConfigs")) {
                                 if (!Array.isArray(message.generativeQuestionConfigs))
                                     return "generativeQuestionConfigs: array expected";
                                 for (var i = 0; i < message.generativeQuestionConfigs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i], long + 1);
                                     if (error)
                                         return "generativeQuestionConfigs." + error;
                                 }
@@ -108162,9 +112772,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListGenerativeQuestionConfigsResponse} ListGenerativeQuestionConfigsResponse
                          */
-                        ListGenerativeQuestionConfigsResponse.fromObject = function fromObject(object) {
+                        ListGenerativeQuestionConfigsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListGenerativeQuestionConfigsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListGenerativeQuestionConfigsResponse();
                             if (object.generativeQuestionConfigs) {
                                 if (!Array.isArray(object.generativeQuestionConfigs))
@@ -108173,7 +112787,7 @@
                                 for (var i = 0; i < object.generativeQuestionConfigs.length; ++i) {
                                     if (typeof object.generativeQuestionConfigs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ListGenerativeQuestionConfigsResponse.generativeQuestionConfigs: object expected");
-                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i]);
+                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i], long + 1);
                                 }
                             }
                             return message;
@@ -108252,7 +112866,7 @@
                         function UpdateGenerativeQuestionConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -108327,9 +112941,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateGenerativeQuestionConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateGenerativeQuestionConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -108337,15 +112955,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 3: {
-                                        message.generativeQuestionConfig = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.decode(reader, reader.uint32());
+                                        message.generativeQuestionConfig = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -108376,16 +112994,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateGenerativeQuestionConfigRequest.verify = function verify(message) {
+                        UpdateGenerativeQuestionConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionConfig != null && message.hasOwnProperty("generativeQuestionConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.verify(message.generativeQuestionConfig);
+                                var error = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.verify(message.generativeQuestionConfig, long + 1);
                                 if (error)
                                     return "generativeQuestionConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -108400,19 +113022,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest} UpdateGenerativeQuestionConfigRequest
                          */
-                        UpdateGenerativeQuestionConfigRequest.fromObject = function fromObject(object) {
+                        UpdateGenerativeQuestionConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest();
                             if (object.generativeQuestionConfig != null) {
                                 if (typeof object.generativeQuestionConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest.generativeQuestionConfig: object expected");
-                                message.generativeQuestionConfig = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfig);
+                                message.generativeQuestionConfig = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -108492,7 +113118,7 @@
                             this.requests = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -108568,9 +113194,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BatchUpdateGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error) {
+                        BatchUpdateGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.BatchUpdateGenerativeQuestionConfigsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -108584,11 +113214,11 @@
                                 case 2: {
                                         if (!(message.requests && message.requests.length))
                                             message.requests = [];
-                                        message.requests.push($root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest.decode(reader, reader.uint32()));
+                                        message.requests.push($root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -108619,9 +113249,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BatchUpdateGenerativeQuestionConfigsRequest.verify = function verify(message) {
+                        BatchUpdateGenerativeQuestionConfigsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -108629,7 +113263,7 @@
                                 if (!Array.isArray(message.requests))
                                     return "requests: array expected";
                                 for (var i = 0; i < message.requests.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest.verify(message.requests[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest.verify(message.requests[i], long + 1);
                                     if (error)
                                         return "requests." + error;
                                 }
@@ -108645,9 +113279,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.BatchUpdateGenerativeQuestionConfigsRequest} BatchUpdateGenerativeQuestionConfigsRequest
                          */
-                        BatchUpdateGenerativeQuestionConfigsRequest.fromObject = function fromObject(object) {
+                        BatchUpdateGenerativeQuestionConfigsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.BatchUpdateGenerativeQuestionConfigsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.BatchUpdateGenerativeQuestionConfigsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -108658,7 +113296,7 @@
                                 for (var i = 0; i < object.requests.length; ++i) {
                                     if (typeof object.requests[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.BatchUpdateGenerativeQuestionConfigsRequest.requests: object expected");
-                                    message.requests[i] = $root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest.fromObject(object.requests[i]);
+                                    message.requests[i] = $root.google.cloud.retail.v2alpha.UpdateGenerativeQuestionConfigRequest.fromObject(object.requests[i], long + 1);
                                 }
                             }
                             return message;
@@ -108741,7 +113379,7 @@
                             this.generativeQuestionConfigs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -108807,9 +113445,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BatchUpdateGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error) {
+                        BatchUpdateGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.BatchUpdateGenerativeQuestionConfigsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -108819,11 +113461,11 @@
                                 case 1: {
                                         if (!(message.generativeQuestionConfigs && message.generativeQuestionConfigs.length))
                                             message.generativeQuestionConfigs = [];
-                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.decode(reader, reader.uint32()));
+                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -108854,14 +113496,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BatchUpdateGenerativeQuestionConfigsResponse.verify = function verify(message) {
+                        BatchUpdateGenerativeQuestionConfigsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionConfigs != null && message.hasOwnProperty("generativeQuestionConfigs")) {
                                 if (!Array.isArray(message.generativeQuestionConfigs))
                                     return "generativeQuestionConfigs: array expected";
                                 for (var i = 0; i < message.generativeQuestionConfigs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i], long + 1);
                                     if (error)
                                         return "generativeQuestionConfigs." + error;
                                 }
@@ -108877,9 +113523,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.BatchUpdateGenerativeQuestionConfigsResponse} BatchUpdateGenerativeQuestionConfigsResponse
                          */
-                        BatchUpdateGenerativeQuestionConfigsResponse.fromObject = function fromObject(object) {
+                        BatchUpdateGenerativeQuestionConfigsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.BatchUpdateGenerativeQuestionConfigsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.BatchUpdateGenerativeQuestionConfigsResponse();
                             if (object.generativeQuestionConfigs) {
                                 if (!Array.isArray(object.generativeQuestionConfigs))
@@ -108888,7 +113538,7 @@
                                 for (var i = 0; i < object.generativeQuestionConfigs.length; ++i) {
                                     if (typeof object.generativeQuestionConfigs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.BatchUpdateGenerativeQuestionConfigsResponse.generativeQuestionConfigs: object expected");
-                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i]);
+                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2alpha.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i], long + 1);
                                 }
                             }
                             return message;
@@ -108976,7 +113626,7 @@
                             this.feedFilters = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -109132,9 +113782,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MerchantCenterAccountLink.decode = function decode(reader, length, error) {
+                        MerchantCenterAccountLink.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -109168,7 +113822,7 @@
                                 case 6: {
                                         if (!(message.feedFilters && message.feedFilters.length))
                                             message.feedFilters = [];
-                                        message.feedFilters.push($root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.MerchantCenterFeedFilter.decode(reader, reader.uint32()));
+                                        message.feedFilters.push($root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.MerchantCenterFeedFilter.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 7: {
@@ -109184,7 +113838,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -109215,9 +113869,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MerchantCenterAccountLink.verify = function verify(message) {
+                        MerchantCenterAccountLink.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -109240,7 +113898,7 @@
                                 if (!Array.isArray(message.feedFilters))
                                     return "feedFilters: array expected";
                                 for (var i = 0; i < message.feedFilters.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.MerchantCenterFeedFilter.verify(message.feedFilters[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.MerchantCenterFeedFilter.verify(message.feedFilters[i], long + 1);
                                     if (error)
                                         return "feedFilters." + error;
                                 }
@@ -109272,9 +113930,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.MerchantCenterAccountLink} MerchantCenterAccountLink
                          */
-                        MerchantCenterAccountLink.fromObject = function fromObject(object) {
+                        MerchantCenterAccountLink.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -109302,7 +113964,7 @@
                                 for (var i = 0; i < object.feedFilters.length; ++i) {
                                     if (typeof object.feedFilters[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.MerchantCenterAccountLink.feedFilters: object expected");
-                                    message.feedFilters[i] = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.MerchantCenterFeedFilter.fromObject(object.feedFilters[i]);
+                                    message.feedFilters[i] = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.MerchantCenterFeedFilter.fromObject(object.feedFilters[i], long + 1);
                                 }
                             }
                             switch (object.state) {
@@ -109443,7 +114105,7 @@
                             function MerchantCenterFeedFilter(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -109528,9 +114190,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            MerchantCenterFeedFilter.decode = function decode(reader, length, error) {
+                            MerchantCenterFeedFilter.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.MerchantCenterFeedFilter();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -109550,7 +114216,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -109581,9 +114247,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            MerchantCenterFeedFilter.verify = function verify(message) {
+                            MerchantCenterFeedFilter.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.primaryFeedId != null && message.hasOwnProperty("primaryFeedId"))
                                     if (!$util.isInteger(message.primaryFeedId) && !(message.primaryFeedId && $util.isInteger(message.primaryFeedId.low) && $util.isInteger(message.primaryFeedId.high)))
                                         return "primaryFeedId: integer|Long expected";
@@ -109604,9 +114274,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.MerchantCenterAccountLink.MerchantCenterFeedFilter} MerchantCenterFeedFilter
                              */
-                            MerchantCenterFeedFilter.fromObject = function fromObject(object) {
+                            MerchantCenterFeedFilter.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.MerchantCenterFeedFilter)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.MerchantCenterFeedFilter();
                                 if (object.primaryFeedId != null)
                                     if ($util.Long)
@@ -109743,7 +114417,7 @@
                         function CreateMerchantCenterAccountLinkMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -109818,9 +114492,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateMerchantCenterAccountLinkMetadata.decode = function decode(reader, length, error) {
+                        CreateMerchantCenterAccountLinkMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -109828,15 +114506,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -109867,16 +114545,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateMerchantCenterAccountLinkMetadata.verify = function verify(message) {
+                        CreateMerchantCenterAccountLinkMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -109891,19 +114573,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkMetadata} CreateMerchantCenterAccountLinkMetadata
                          */
-                        CreateMerchantCenterAccountLinkMetadata.fromObject = function fromObject(object) {
+                        CreateMerchantCenterAccountLinkMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkMetadata.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             return message;
                         };
@@ -110115,7 +114801,7 @@
                         function ListMerchantCenterAccountLinksRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -110180,9 +114866,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListMerchantCenterAccountLinksRequest.decode = function decode(reader, length, error) {
+                        ListMerchantCenterAccountLinksRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListMerchantCenterAccountLinksRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -110194,7 +114884,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -110225,9 +114915,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListMerchantCenterAccountLinksRequest.verify = function verify(message) {
+                        ListMerchantCenterAccountLinksRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -110242,9 +114936,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListMerchantCenterAccountLinksRequest} ListMerchantCenterAccountLinksRequest
                          */
-                        ListMerchantCenterAccountLinksRequest.fromObject = function fromObject(object) {
+                        ListMerchantCenterAccountLinksRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListMerchantCenterAccountLinksRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListMerchantCenterAccountLinksRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -110321,7 +115019,7 @@
                             this.merchantCenterAccountLinks = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -110387,9 +115085,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListMerchantCenterAccountLinksResponse.decode = function decode(reader, length, error) {
+                        ListMerchantCenterAccountLinksResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListMerchantCenterAccountLinksResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -110399,11 +115101,11 @@
                                 case 1: {
                                         if (!(message.merchantCenterAccountLinks && message.merchantCenterAccountLinks.length))
                                             message.merchantCenterAccountLinks = [];
-                                        message.merchantCenterAccountLinks.push($root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.decode(reader, reader.uint32()));
+                                        message.merchantCenterAccountLinks.push($root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -110434,14 +115136,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListMerchantCenterAccountLinksResponse.verify = function verify(message) {
+                        ListMerchantCenterAccountLinksResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.merchantCenterAccountLinks != null && message.hasOwnProperty("merchantCenterAccountLinks")) {
                                 if (!Array.isArray(message.merchantCenterAccountLinks))
                                     return "merchantCenterAccountLinks: array expected";
                                 for (var i = 0; i < message.merchantCenterAccountLinks.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.verify(message.merchantCenterAccountLinks[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.verify(message.merchantCenterAccountLinks[i], long + 1);
                                     if (error)
                                         return "merchantCenterAccountLinks." + error;
                                 }
@@ -110457,9 +115163,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListMerchantCenterAccountLinksResponse} ListMerchantCenterAccountLinksResponse
                          */
-                        ListMerchantCenterAccountLinksResponse.fromObject = function fromObject(object) {
+                        ListMerchantCenterAccountLinksResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListMerchantCenterAccountLinksResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListMerchantCenterAccountLinksResponse();
                             if (object.merchantCenterAccountLinks) {
                                 if (!Array.isArray(object.merchantCenterAccountLinks))
@@ -110468,7 +115178,7 @@
                                 for (var i = 0; i < object.merchantCenterAccountLinks.length; ++i) {
                                     if (typeof object.merchantCenterAccountLinks[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ListMerchantCenterAccountLinksResponse.merchantCenterAccountLinks: object expected");
-                                    message.merchantCenterAccountLinks[i] = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.fromObject(object.merchantCenterAccountLinks[i]);
+                                    message.merchantCenterAccountLinks[i] = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.fromObject(object.merchantCenterAccountLinks[i], long + 1);
                                 }
                             }
                             return message;
@@ -110547,7 +115257,7 @@
                         function CreateMerchantCenterAccountLinkRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -110622,9 +115332,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateMerchantCenterAccountLinkRequest.decode = function decode(reader, length, error) {
+                        CreateMerchantCenterAccountLinkRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -110636,11 +115350,11 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.merchantCenterAccountLink = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.decode(reader, reader.uint32());
+                                        message.merchantCenterAccountLink = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -110671,14 +115385,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateMerchantCenterAccountLinkRequest.verify = function verify(message) {
+                        CreateMerchantCenterAccountLinkRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.merchantCenterAccountLink != null && message.hasOwnProperty("merchantCenterAccountLink")) {
-                                var error = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.verify(message.merchantCenterAccountLink);
+                                var error = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.verify(message.merchantCenterAccountLink, long + 1);
                                 if (error)
                                     return "merchantCenterAccountLink." + error;
                             }
@@ -110693,16 +115411,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkRequest} CreateMerchantCenterAccountLinkRequest
                          */
-                        CreateMerchantCenterAccountLinkRequest.fromObject = function fromObject(object) {
+                        CreateMerchantCenterAccountLinkRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.merchantCenterAccountLink != null) {
                                 if (typeof object.merchantCenterAccountLink !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CreateMerchantCenterAccountLinkRequest.merchantCenterAccountLink: object expected");
-                                message.merchantCenterAccountLink = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.fromObject(object.merchantCenterAccountLink);
+                                message.merchantCenterAccountLink = $root.google.cloud.retail.v2alpha.MerchantCenterAccountLink.fromObject(object.merchantCenterAccountLink, long + 1);
                             }
                             return message;
                         };
@@ -110780,7 +115502,7 @@
                         function DeleteMerchantCenterAccountLinkRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -110845,9 +115567,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteMerchantCenterAccountLinkRequest.decode = function decode(reader, length, error) {
+                        DeleteMerchantCenterAccountLinkRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.DeleteMerchantCenterAccountLinkRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -110859,7 +115585,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -110890,9 +115616,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteMerchantCenterAccountLinkRequest.verify = function verify(message) {
+                        DeleteMerchantCenterAccountLinkRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -110907,9 +115637,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.DeleteMerchantCenterAccountLinkRequest} DeleteMerchantCenterAccountLinkRequest
                          */
-                        DeleteMerchantCenterAccountLinkRequest.fromObject = function fromObject(object) {
+                        DeleteMerchantCenterAccountLinkRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.DeleteMerchantCenterAccountLinkRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.DeleteMerchantCenterAccountLinkRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -111001,7 +115735,7 @@
                             this.servingConfigLists = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -111231,9 +115965,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Model.decode = function decode(reader, length, error) {
+                        Model.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Model();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -111241,7 +115979,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 17: {
-                                        message.pageOptimizationConfig = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.decode(reader, reader.uint32());
+                                        message.pageOptimizationConfig = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
@@ -111261,11 +115999,11 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -111281,7 +116019,7 @@
                                         break;
                                     }
                                 case 12: {
-                                        message.lastTuneTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.lastTuneTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 15: {
@@ -111299,15 +116037,15 @@
                                 case 19: {
                                         if (!(message.servingConfigLists && message.servingConfigLists.length))
                                             message.servingConfigLists = [];
-                                        message.servingConfigLists.push($root.google.cloud.retail.v2alpha.Model.ServingConfigList.decode(reader, reader.uint32()));
+                                        message.servingConfigLists.push($root.google.cloud.retail.v2alpha.Model.ServingConfigList.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 22: {
-                                        message.modelFeaturesConfig = $root.google.cloud.retail.v2alpha.Model.ModelFeaturesConfig.decode(reader, reader.uint32());
+                                        message.modelFeaturesConfig = $root.google.cloud.retail.v2alpha.Model.ModelFeaturesConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -111338,14 +116076,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Model.verify = function verify(message) {
+                        Model.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.pageOptimizationConfig != null && message.hasOwnProperty("pageOptimizationConfig")) {
                                 properties.trainingConfig = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.verify(message.pageOptimizationConfig);
+                                    var error = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.verify(message.pageOptimizationConfig, long + 1);
                                     if (error)
                                         return "pageOptimizationConfig." + error;
                                 }
@@ -111376,12 +116118,12 @@
                                     break;
                                 }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -111402,7 +116144,7 @@
                                     break;
                                 }
                             if (message.lastTuneTime != null && message.hasOwnProperty("lastTuneTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.lastTuneTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.lastTuneTime, long + 1);
                                 if (error)
                                     return "lastTuneTime." + error;
                             }
@@ -111431,13 +116173,13 @@
                                 if (!Array.isArray(message.servingConfigLists))
                                     return "servingConfigLists: array expected";
                                 for (var i = 0; i < message.servingConfigLists.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Model.ServingConfigList.verify(message.servingConfigLists[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Model.ServingConfigList.verify(message.servingConfigLists[i], long + 1);
                                     if (error)
                                         return "servingConfigLists." + error;
                                 }
                             }
                             if (message.modelFeaturesConfig != null && message.hasOwnProperty("modelFeaturesConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.Model.ModelFeaturesConfig.verify(message.modelFeaturesConfig);
+                                var error = $root.google.cloud.retail.v2alpha.Model.ModelFeaturesConfig.verify(message.modelFeaturesConfig, long + 1);
                                 if (error)
                                     return "modelFeaturesConfig." + error;
                             }
@@ -111452,14 +116194,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Model} Model
                          */
-                        Model.fromObject = function fromObject(object) {
+                        Model.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Model)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Model();
                             if (object.pageOptimizationConfig != null) {
                                 if (typeof object.pageOptimizationConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Model.pageOptimizationConfig: object expected");
-                                message.pageOptimizationConfig = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.fromObject(object.pageOptimizationConfig);
+                                message.pageOptimizationConfig = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.fromObject(object.pageOptimizationConfig, long + 1);
                             }
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -111512,12 +116258,12 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Model.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Model.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.type != null)
                                 message.type = String(object.type);
@@ -111550,7 +116296,7 @@
                             if (object.lastTuneTime != null) {
                                 if (typeof object.lastTuneTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Model.lastTuneTime: object expected");
-                                message.lastTuneTime = $root.google.protobuf.Timestamp.fromObject(object.lastTuneTime);
+                                message.lastTuneTime = $root.google.protobuf.Timestamp.fromObject(object.lastTuneTime, long + 1);
                             }
                             if (object.tuningOperation != null)
                                 message.tuningOperation = String(object.tuningOperation);
@@ -111601,13 +116347,13 @@
                                 for (var i = 0; i < object.servingConfigLists.length; ++i) {
                                     if (typeof object.servingConfigLists[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Model.servingConfigLists: object expected");
-                                    message.servingConfigLists[i] = $root.google.cloud.retail.v2alpha.Model.ServingConfigList.fromObject(object.servingConfigLists[i]);
+                                    message.servingConfigLists[i] = $root.google.cloud.retail.v2alpha.Model.ServingConfigList.fromObject(object.servingConfigLists[i], long + 1);
                                 }
                             }
                             if (object.modelFeaturesConfig != null) {
                                 if (typeof object.modelFeaturesConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.Model.modelFeaturesConfig: object expected");
-                                message.modelFeaturesConfig = $root.google.cloud.retail.v2alpha.Model.ModelFeaturesConfig.fromObject(object.modelFeaturesConfig);
+                                message.modelFeaturesConfig = $root.google.cloud.retail.v2alpha.Model.ModelFeaturesConfig.fromObject(object.modelFeaturesConfig, long + 1);
                             }
                             return message;
                         };
@@ -111733,7 +116479,7 @@
                                 this.panels = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -111819,9 +116565,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PageOptimizationConfig.decode = function decode(reader, length, error) {
+                            PageOptimizationConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -111835,7 +116585,7 @@
                                     case 2: {
                                             if (!(message.panels && message.panels.length))
                                                 message.panels = [];
-                                            message.panels.push($root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel.decode(reader, reader.uint32()));
+                                            message.panels.push($root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 3: {
@@ -111843,7 +116593,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -111874,9 +116624,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PageOptimizationConfig.verify = function verify(message) {
+                            PageOptimizationConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.pageOptimizationEventType != null && message.hasOwnProperty("pageOptimizationEventType"))
                                     if (!$util.isString(message.pageOptimizationEventType))
                                         return "pageOptimizationEventType: string expected";
@@ -111884,7 +116638,7 @@
                                     if (!Array.isArray(message.panels))
                                         return "panels: array expected";
                                     for (var i = 0; i < message.panels.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel.verify(message.panels[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel.verify(message.panels[i], long + 1);
                                         if (error)
                                             return "panels." + error;
                                     }
@@ -111911,9 +116665,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Model.PageOptimizationConfig} PageOptimizationConfig
                              */
-                            PageOptimizationConfig.fromObject = function fromObject(object) {
+                            PageOptimizationConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig();
                                 if (object.pageOptimizationEventType != null)
                                     message.pageOptimizationEventType = String(object.pageOptimizationEventType);
@@ -111924,7 +116682,7 @@
                                     for (var i = 0; i < object.panels.length; ++i) {
                                         if (typeof object.panels[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.Model.PageOptimizationConfig.panels: object expected");
-                                        message.panels[i] = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel.fromObject(object.panels[i]);
+                                        message.panels[i] = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel.fromObject(object.panels[i], long + 1);
                                     }
                                 }
                                 switch (object.restriction) {
@@ -112035,7 +116793,7 @@
                                 function Candidate(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -112114,9 +116872,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                Candidate.decode = function decode(reader, length, error) {
+                                Candidate.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -112128,7 +116890,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -112159,9 +116921,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                Candidate.verify = function verify(message) {
+                                Candidate.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.servingConfigId != null && message.hasOwnProperty("servingConfigId")) {
                                         properties.candidate = 1;
@@ -112179,9 +116945,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate} Candidate
                                  */
-                                Candidate.fromObject = function fromObject(object) {
+                                Candidate.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate();
                                     if (object.servingConfigId != null)
                                         message.servingConfigId = String(object.servingConfigId);
@@ -112261,7 +117031,7 @@
                                     this.candidates = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -112347,9 +117117,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                Panel.decode = function decode(reader, length, error) {
+                                Panel.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -112363,15 +117137,15 @@
                                         case 2: {
                                                 if (!(message.candidates && message.candidates.length))
                                                     message.candidates = [];
-                                                message.candidates.push($root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.decode(reader, reader.uint32()));
+                                                message.candidates.push($root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         case 3: {
-                                                message.defaultCandidate = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.decode(reader, reader.uint32());
+                                                message.defaultCandidate = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -112402,9 +117176,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                Panel.verify = function verify(message) {
+                                Panel.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.displayName != null && message.hasOwnProperty("displayName"))
                                         if (!$util.isString(message.displayName))
                                             return "displayName: string expected";
@@ -112412,13 +117190,13 @@
                                         if (!Array.isArray(message.candidates))
                                             return "candidates: array expected";
                                         for (var i = 0; i < message.candidates.length; ++i) {
-                                            var error = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.verify(message.candidates[i]);
+                                            var error = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.verify(message.candidates[i], long + 1);
                                             if (error)
                                                 return "candidates." + error;
                                         }
                                     }
                                     if (message.defaultCandidate != null && message.hasOwnProperty("defaultCandidate")) {
-                                        var error = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.verify(message.defaultCandidate);
+                                        var error = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.verify(message.defaultCandidate, long + 1);
                                         if (error)
                                             return "defaultCandidate." + error;
                                     }
@@ -112433,9 +117211,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel} Panel
                                  */
-                                Panel.fromObject = function fromObject(object) {
+                                Panel.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel();
                                     if (object.displayName != null)
                                         message.displayName = String(object.displayName);
@@ -112446,13 +117228,13 @@
                                         for (var i = 0; i < object.candidates.length; ++i) {
                                             if (typeof object.candidates[i] !== "object")
                                                 throw TypeError(".google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel.candidates: object expected");
-                                            message.candidates[i] = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.fromObject(object.candidates[i]);
+                                            message.candidates[i] = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.fromObject(object.candidates[i], long + 1);
                                         }
                                     }
                                     if (object.defaultCandidate != null) {
                                         if (typeof object.defaultCandidate !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Panel.defaultCandidate: object expected");
-                                        message.defaultCandidate = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.fromObject(object.defaultCandidate);
+                                        message.defaultCandidate = $root.google.cloud.retail.v2alpha.Model.PageOptimizationConfig.Candidate.fromObject(object.defaultCandidate, long + 1);
                                     }
                                     return message;
                                 };
@@ -112561,7 +117343,7 @@
                                 this.servingConfigIds = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -112627,9 +117409,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ServingConfigList.decode = function decode(reader, length, error) {
+                            ServingConfigList.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Model.ServingConfigList();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -112643,7 +117429,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -112674,9 +117460,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ServingConfigList.verify = function verify(message) {
+                            ServingConfigList.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.servingConfigIds != null && message.hasOwnProperty("servingConfigIds")) {
                                     if (!Array.isArray(message.servingConfigIds))
                                         return "servingConfigIds: array expected";
@@ -112695,9 +117485,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Model.ServingConfigList} ServingConfigList
                              */
-                            ServingConfigList.fromObject = function fromObject(object) {
+                            ServingConfigList.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Model.ServingConfigList)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Model.ServingConfigList();
                                 if (object.servingConfigIds) {
                                     if (!Array.isArray(object.servingConfigIds))
@@ -112781,7 +117575,7 @@
                             function FrequentlyBoughtTogetherFeaturesConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -112846,9 +117640,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FrequentlyBoughtTogetherFeaturesConfig.decode = function decode(reader, length, error) {
+                            FrequentlyBoughtTogetherFeaturesConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Model.FrequentlyBoughtTogetherFeaturesConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -112860,7 +117658,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -112891,9 +117689,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FrequentlyBoughtTogetherFeaturesConfig.verify = function verify(message) {
+                            FrequentlyBoughtTogetherFeaturesConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.contextProductsType != null && message.hasOwnProperty("contextProductsType"))
                                     switch (message.contextProductsType) {
                                     default:
@@ -112914,9 +117716,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Model.FrequentlyBoughtTogetherFeaturesConfig} FrequentlyBoughtTogetherFeaturesConfig
                              */
-                            FrequentlyBoughtTogetherFeaturesConfig.fromObject = function fromObject(object) {
+                            FrequentlyBoughtTogetherFeaturesConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Model.FrequentlyBoughtTogetherFeaturesConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Model.FrequentlyBoughtTogetherFeaturesConfig();
                                 switch (object.contextProductsType) {
                                 default:
@@ -113010,7 +117816,7 @@
                             function ModelFeaturesConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -113089,9 +117895,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ModelFeaturesConfig.decode = function decode(reader, length, error) {
+                            ModelFeaturesConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Model.ModelFeaturesConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -113099,11 +117909,11 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2alpha.Model.FrequentlyBoughtTogetherFeaturesConfig.decode(reader, reader.uint32());
+                                            message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2alpha.Model.FrequentlyBoughtTogetherFeaturesConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -113134,14 +117944,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ModelFeaturesConfig.verify = function verify(message) {
+                            ModelFeaturesConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.frequentlyBoughtTogetherConfig != null && message.hasOwnProperty("frequentlyBoughtTogetherConfig")) {
                                     properties.typeDedicatedConfig = 1;
                                     {
-                                        var error = $root.google.cloud.retail.v2alpha.Model.FrequentlyBoughtTogetherFeaturesConfig.verify(message.frequentlyBoughtTogetherConfig);
+                                        var error = $root.google.cloud.retail.v2alpha.Model.FrequentlyBoughtTogetherFeaturesConfig.verify(message.frequentlyBoughtTogetherConfig, long + 1);
                                         if (error)
                                             return "frequentlyBoughtTogetherConfig." + error;
                                     }
@@ -113157,14 +117971,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.Model.ModelFeaturesConfig} ModelFeaturesConfig
                              */
-                            ModelFeaturesConfig.fromObject = function fromObject(object) {
+                            ModelFeaturesConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.Model.ModelFeaturesConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.Model.ModelFeaturesConfig();
                                 if (object.frequentlyBoughtTogetherConfig != null) {
                                     if (typeof object.frequentlyBoughtTogetherConfig !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.Model.ModelFeaturesConfig.frequentlyBoughtTogetherConfig: object expected");
-                                    message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2alpha.Model.FrequentlyBoughtTogetherFeaturesConfig.fromObject(object.frequentlyBoughtTogetherConfig);
+                                    message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2alpha.Model.FrequentlyBoughtTogetherFeaturesConfig.fromObject(object.frequentlyBoughtTogetherConfig, long + 1);
                                 }
                                 return message;
                             };
@@ -113627,7 +118445,7 @@
                         function CreateModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -113712,9 +118530,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateModelRequest.decode = function decode(reader, length, error) {
+                        CreateModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CreateModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -113726,7 +118548,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.model = $root.google.cloud.retail.v2alpha.Model.decode(reader, reader.uint32());
+                                        message.model = $root.google.cloud.retail.v2alpha.Model.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -113734,7 +118556,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -113765,14 +118587,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateModelRequest.verify = function verify(message) {
+                        CreateModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.model != null && message.hasOwnProperty("model")) {
-                                var error = $root.google.cloud.retail.v2alpha.Model.verify(message.model);
+                                var error = $root.google.cloud.retail.v2alpha.Model.verify(message.model, long + 1);
                                 if (error)
                                     return "model." + error;
                             }
@@ -113790,16 +118616,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CreateModelRequest} CreateModelRequest
                          */
-                        CreateModelRequest.fromObject = function fromObject(object) {
+                        CreateModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CreateModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CreateModelRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.model != null) {
                                 if (typeof object.model !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CreateModelRequest.model: object expected");
-                                message.model = $root.google.cloud.retail.v2alpha.Model.fromObject(object.model);
+                                message.model = $root.google.cloud.retail.v2alpha.Model.fromObject(object.model, long + 1);
                             }
                             if (object.dryRun != null)
                                 message.dryRun = Boolean(object.dryRun);
@@ -113883,7 +118713,7 @@
                         function UpdateModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -113958,9 +118788,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateModelRequest.decode = function decode(reader, length, error) {
+                        UpdateModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -113968,15 +118802,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.model = $root.google.cloud.retail.v2alpha.Model.decode(reader, reader.uint32());
+                                        message.model = $root.google.cloud.retail.v2alpha.Model.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -114007,16 +118841,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateModelRequest.verify = function verify(message) {
+                        UpdateModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.model != null && message.hasOwnProperty("model")) {
-                                var error = $root.google.cloud.retail.v2alpha.Model.verify(message.model);
+                                var error = $root.google.cloud.retail.v2alpha.Model.verify(message.model, long + 1);
                                 if (error)
                                     return "model." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -114031,19 +118869,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateModelRequest} UpdateModelRequest
                          */
-                        UpdateModelRequest.fromObject = function fromObject(object) {
+                        UpdateModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateModelRequest();
                             if (object.model != null) {
                                 if (typeof object.model !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateModelRequest.model: object expected");
-                                message.model = $root.google.cloud.retail.v2alpha.Model.fromObject(object.model);
+                                message.model = $root.google.cloud.retail.v2alpha.Model.fromObject(object.model, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateModelRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -114121,7 +118963,7 @@
                         function GetModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -114186,9 +119028,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetModelRequest.decode = function decode(reader, length, error) {
+                        GetModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -114200,7 +119046,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -114231,9 +119077,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetModelRequest.verify = function verify(message) {
+                        GetModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -114248,9 +119098,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetModelRequest} GetModelRequest
                          */
-                        GetModelRequest.fromObject = function fromObject(object) {
+                        GetModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -114326,7 +119180,7 @@
                         function PauseModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -114391,9 +119245,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PauseModelRequest.decode = function decode(reader, length, error) {
+                        PauseModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PauseModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -114405,7 +119263,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -114436,9 +119294,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PauseModelRequest.verify = function verify(message) {
+                        PauseModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -114453,9 +119315,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PauseModelRequest} PauseModelRequest
                          */
-                        PauseModelRequest.fromObject = function fromObject(object) {
+                        PauseModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PauseModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PauseModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -114531,7 +119397,7 @@
                         function ResumeModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -114596,9 +119462,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ResumeModelRequest.decode = function decode(reader, length, error) {
+                        ResumeModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ResumeModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -114610,7 +119480,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -114641,9 +119511,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ResumeModelRequest.verify = function verify(message) {
+                        ResumeModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -114658,9 +119532,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ResumeModelRequest} ResumeModelRequest
                          */
-                        ResumeModelRequest.fromObject = function fromObject(object) {
+                        ResumeModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ResumeModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ResumeModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -114738,7 +119616,7 @@
                         function ListModelsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -114823,9 +119701,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListModelsRequest.decode = function decode(reader, length, error) {
+                        ListModelsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListModelsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -114845,7 +119727,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -114876,9 +119758,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListModelsRequest.verify = function verify(message) {
+                        ListModelsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -114899,9 +119785,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListModelsRequest} ListModelsRequest
                          */
-                        ListModelsRequest.fromObject = function fromObject(object) {
+                        ListModelsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListModelsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListModelsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -114988,7 +119878,7 @@
                         function DeleteModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -115053,9 +119943,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteModelRequest.decode = function decode(reader, length, error) {
+                        DeleteModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.DeleteModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -115067,7 +119961,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -115098,9 +119992,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteModelRequest.verify = function verify(message) {
+                        DeleteModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -115115,9 +120013,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.DeleteModelRequest} DeleteModelRequest
                          */
-                        DeleteModelRequest.fromObject = function fromObject(object) {
+                        DeleteModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.DeleteModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.DeleteModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -115195,7 +120097,7 @@
                             this.models = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -115271,9 +120173,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListModelsResponse.decode = function decode(reader, length, error) {
+                        ListModelsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListModelsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -115283,7 +120189,7 @@
                                 case 1: {
                                         if (!(message.models && message.models.length))
                                             message.models = [];
-                                        message.models.push($root.google.cloud.retail.v2alpha.Model.decode(reader, reader.uint32()));
+                                        message.models.push($root.google.cloud.retail.v2alpha.Model.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -115291,7 +120197,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -115322,14 +120228,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListModelsResponse.verify = function verify(message) {
+                        ListModelsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.models != null && message.hasOwnProperty("models")) {
                                 if (!Array.isArray(message.models))
                                     return "models: array expected";
                                 for (var i = 0; i < message.models.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Model.verify(message.models[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Model.verify(message.models[i], long + 1);
                                     if (error)
                                         return "models." + error;
                                 }
@@ -115348,9 +120258,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListModelsResponse} ListModelsResponse
                          */
-                        ListModelsResponse.fromObject = function fromObject(object) {
+                        ListModelsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListModelsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListModelsResponse();
                             if (object.models) {
                                 if (!Array.isArray(object.models))
@@ -115359,7 +120273,7 @@
                                 for (var i = 0; i < object.models.length; ++i) {
                                     if (typeof object.models[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ListModelsResponse.models: object expected");
-                                    message.models[i] = $root.google.cloud.retail.v2alpha.Model.fromObject(object.models[i]);
+                                    message.models[i] = $root.google.cloud.retail.v2alpha.Model.fromObject(object.models[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -115443,7 +120357,7 @@
                         function TuneModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -115508,9 +120422,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TuneModelRequest.decode = function decode(reader, length, error) {
+                        TuneModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.TuneModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -115522,7 +120440,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -115553,9 +120471,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TuneModelRequest.verify = function verify(message) {
+                        TuneModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -115570,9 +120492,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.TuneModelRequest} TuneModelRequest
                          */
-                        TuneModelRequest.fromObject = function fromObject(object) {
+                        TuneModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.TuneModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.TuneModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -115648,7 +120574,7 @@
                         function CreateModelMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -115713,9 +120639,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateModelMetadata.decode = function decode(reader, length, error) {
+                        CreateModelMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CreateModelMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -115727,7 +120657,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -115758,9 +120688,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateModelMetadata.verify = function verify(message) {
+                        CreateModelMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.model != null && message.hasOwnProperty("model"))
                                 if (!$util.isString(message.model))
                                     return "model: string expected";
@@ -115775,9 +120709,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CreateModelMetadata} CreateModelMetadata
                          */
-                        CreateModelMetadata.fromObject = function fromObject(object) {
+                        CreateModelMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CreateModelMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CreateModelMetadata();
                             if (object.model != null)
                                 message.model = String(object.model);
@@ -115853,7 +120791,7 @@
                         function TuneModelMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -115918,9 +120856,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TuneModelMetadata.decode = function decode(reader, length, error) {
+                        TuneModelMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.TuneModelMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -115932,7 +120874,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -115963,9 +120905,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TuneModelMetadata.verify = function verify(message) {
+                        TuneModelMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.model != null && message.hasOwnProperty("model"))
                                 if (!$util.isString(message.model))
                                     return "model: string expected";
@@ -115980,9 +120926,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.TuneModelMetadata} TuneModelMetadata
                          */
-                        TuneModelMetadata.fromObject = function fromObject(object) {
+                        TuneModelMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.TuneModelMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.TuneModelMetadata();
                             if (object.model != null)
                                 message.model = String(object.model);
@@ -116057,7 +121007,7 @@
                         function TuneModelResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -116112,9 +121062,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TuneModelResponse.decode = function decode(reader, length, error) {
+                        TuneModelResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.TuneModelResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -116122,7 +121076,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -116153,9 +121107,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TuneModelResponse.verify = function verify(message) {
+                        TuneModelResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -116167,9 +121125,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.TuneModelResponse} TuneModelResponse
                          */
-                        TuneModelResponse.fromObject = function fromObject(object) {
+                        TuneModelResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.TuneModelResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.TuneModelResponse();
                         };
     
@@ -116312,7 +121274,7 @@
                             this.labels = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -116451,9 +121413,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PredictRequest.decode = function decode(reader, length, error) {
+                        PredictRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PredictRequest(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -116465,7 +121431,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.userEvent = $root.google.cloud.retail.v2alpha.UserEvent.decode(reader, reader.uint32());
+                                        message.userEvent = $root.google.cloud.retail.v2alpha.UserEvent.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -116497,13 +121463,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.protobuf.Value.decode(reader, reader.uint32());
+                                                value = $root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.params, key);
                                         message.params[key] = value;
                                         break;
                                     }
@@ -116523,15 +121491,17 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -116562,14 +121532,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PredictRequest.verify = function verify(message) {
+                        PredictRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.placement != null && message.hasOwnProperty("placement"))
                                 if (!$util.isString(message.placement))
                                     return "placement: string expected";
                             if (message.userEvent != null && message.hasOwnProperty("userEvent")) {
-                                var error = $root.google.cloud.retail.v2alpha.UserEvent.verify(message.userEvent);
+                                var error = $root.google.cloud.retail.v2alpha.UserEvent.verify(message.userEvent, long + 1);
                                 if (error)
                                     return "userEvent." + error;
                             }
@@ -116590,7 +121564,7 @@
                                     return "params: object expected";
                                 var key = Object.keys(message.params);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.protobuf.Value.verify(message.params[key[i]]);
+                                    var error = $root.google.protobuf.Value.verify(message.params[key[i]], long + 1);
                                     if (error)
                                         return "params." + error;
                                 }
@@ -116614,16 +121588,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PredictRequest} PredictRequest
                          */
-                        PredictRequest.fromObject = function fromObject(object) {
+                        PredictRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PredictRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PredictRequest();
                             if (object.placement != null)
                                 message.placement = String(object.placement);
                             if (object.userEvent != null) {
                                 if (typeof object.userEvent !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.PredictRequest.userEvent: object expected");
-                                message.userEvent = $root.google.cloud.retail.v2alpha.UserEvent.fromObject(object.userEvent);
+                                message.userEvent = $root.google.cloud.retail.v2alpha.UserEvent.fromObject(object.userEvent, long + 1);
                             }
                             if (object.pageSize != null)
                                 message.pageSize = object.pageSize | 0;
@@ -116638,17 +121616,22 @@
                                     throw TypeError(".google.cloud.retail.v2alpha.PredictRequest.params: object expected");
                                 message.params = {};
                                 for (var keys = Object.keys(object.params), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.params, keys[i]);
                                     if (typeof object.params[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.PredictRequest.params: object expected");
-                                    message.params[keys[i]] = $root.google.protobuf.Value.fromObject(object.params[keys[i]]);
+                                    message.params[keys[i]] = $root.google.protobuf.Value.fromObject(object.params[keys[i]], long + 1);
                                 }
                             }
                             if (object.labels) {
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.PredictRequest.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             return message;
                         };
@@ -116693,13 +121676,19 @@
                             var keys2;
                             if (message.params && (keys2 = Object.keys(message.params)).length) {
                                 object.params = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.params, keys2[j]);
                                     object.params[keys2[j]] = $root.google.protobuf.Value.toObject(message.params[keys2[j]], options);
+                                }
                             }
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             return object;
                         };
@@ -116758,7 +121747,7 @@
                             this.missingIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -116855,9 +121844,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PredictResponse.decode = function decode(reader, length, error) {
+                        PredictResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PredictResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -116867,7 +121860,7 @@
                                 case 1: {
                                         if (!(message.results && message.results.length))
                                             message.results = [];
-                                        message.results.push($root.google.cloud.retail.v2alpha.PredictResponse.PredictionResult.decode(reader, reader.uint32()));
+                                        message.results.push($root.google.cloud.retail.v2alpha.PredictResponse.PredictionResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -116885,7 +121878,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -116916,14 +121909,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PredictResponse.verify = function verify(message) {
+                        PredictResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.results != null && message.hasOwnProperty("results")) {
                                 if (!Array.isArray(message.results))
                                     return "results: array expected";
                                 for (var i = 0; i < message.results.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.PredictResponse.PredictionResult.verify(message.results[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.PredictResponse.PredictionResult.verify(message.results[i], long + 1);
                                     if (error)
                                         return "results." + error;
                                 }
@@ -116952,9 +121949,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PredictResponse} PredictResponse
                          */
-                        PredictResponse.fromObject = function fromObject(object) {
+                        PredictResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PredictResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PredictResponse();
                             if (object.results) {
                                 if (!Array.isArray(object.results))
@@ -116963,7 +121964,7 @@
                                 for (var i = 0; i < object.results.length; ++i) {
                                     if (typeof object.results[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.PredictResponse.results: object expected");
-                                    message.results[i] = $root.google.cloud.retail.v2alpha.PredictResponse.PredictionResult.fromObject(object.results[i]);
+                                    message.results[i] = $root.google.cloud.retail.v2alpha.PredictResponse.PredictionResult.fromObject(object.results[i], long + 1);
                                 }
                             }
                             if (object.attributionToken != null)
@@ -117066,7 +122067,7 @@
                                 this.metadata = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -117144,9 +122145,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PredictionResult.decode = function decode(reader, length, error) {
+                            PredictionResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PredictResponse.PredictionResult(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -117170,18 +122175,20 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32());
+                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.metadata, key);
                                             message.metadata[key] = value;
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -117212,9 +122219,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PredictionResult.verify = function verify(message) {
+                            PredictionResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.id != null && message.hasOwnProperty("id"))
                                     if (!$util.isString(message.id))
                                         return "id: string expected";
@@ -117223,7 +122234,7 @@
                                         return "metadata: object expected";
                                     var key = Object.keys(message.metadata);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.protobuf.Value.verify(message.metadata[key[i]]);
+                                        var error = $root.google.protobuf.Value.verify(message.metadata[key[i]], long + 1);
                                         if (error)
                                             return "metadata." + error;
                                     }
@@ -117239,9 +122250,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.PredictResponse.PredictionResult} PredictionResult
                              */
-                            PredictionResult.fromObject = function fromObject(object) {
+                            PredictionResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.PredictResponse.PredictionResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.PredictResponse.PredictionResult();
                                 if (object.id != null)
                                     message.id = String(object.id);
@@ -117250,9 +122265,11 @@
                                         throw TypeError(".google.cloud.retail.v2alpha.PredictResponse.PredictionResult.metadata: object expected");
                                     message.metadata = {};
                                     for (var keys = Object.keys(object.metadata), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.metadata, keys[i]);
                                         if (typeof object.metadata[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.PredictResponse.PredictionResult.metadata: object expected");
-                                        message.metadata[keys[i]] = $root.google.protobuf.Value.fromObject(object.metadata[keys[i]]);
+                                        message.metadata[keys[i]] = $root.google.protobuf.Value.fromObject(object.metadata[keys[i]], long + 1);
                                     }
                                 }
                                 return message;
@@ -117280,8 +122297,11 @@
                                 var keys2;
                                 if (message.metadata && (keys2 = Object.keys(message.metadata)).length) {
                                     object.metadata = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.metadata, keys2[j]);
                                         object.metadata[keys2[j]] = $root.google.protobuf.Value.toObject(message.metadata[keys2[j]], options);
+                                    }
                                 }
                                 return object;
                             };
@@ -117804,7 +122824,7 @@
                         function CreateProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -117889,9 +122909,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateProductRequest.decode = function decode(reader, length, error) {
+                        CreateProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CreateProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -117903,7 +122927,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.product = $root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32());
+                                        message.product = $root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -117911,7 +122935,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -117942,14 +122966,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateProductRequest.verify = function verify(message) {
+                        CreateProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.product != null && message.hasOwnProperty("product")) {
-                                var error = $root.google.cloud.retail.v2alpha.Product.verify(message.product);
+                                var error = $root.google.cloud.retail.v2alpha.Product.verify(message.product, long + 1);
                                 if (error)
                                     return "product." + error;
                             }
@@ -117967,16 +122995,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CreateProductRequest} CreateProductRequest
                          */
-                        CreateProductRequest.fromObject = function fromObject(object) {
+                        CreateProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CreateProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CreateProductRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.product != null) {
                                 if (typeof object.product !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CreateProductRequest.product: object expected");
-                                message.product = $root.google.cloud.retail.v2alpha.Product.fromObject(object.product);
+                                message.product = $root.google.cloud.retail.v2alpha.Product.fromObject(object.product, long + 1);
                             }
                             if (object.productId != null)
                                 message.productId = String(object.productId);
@@ -118059,7 +123091,7 @@
                         function GetProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -118124,9 +123156,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetProductRequest.decode = function decode(reader, length, error) {
+                        GetProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -118138,7 +123174,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -118169,9 +123205,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetProductRequest.verify = function verify(message) {
+                        GetProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -118186,9 +123226,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetProductRequest} GetProductRequest
                          */
-                        GetProductRequest.fromObject = function fromObject(object) {
+                        GetProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetProductRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -118266,7 +123310,7 @@
                         function UpdateProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -118351,9 +123395,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateProductRequest.decode = function decode(reader, length, error) {
+                        UpdateProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -118361,11 +123409,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.product = $root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32());
+                                        message.product = $root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -118373,7 +123421,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -118404,16 +123452,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateProductRequest.verify = function verify(message) {
+                        UpdateProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product")) {
-                                var error = $root.google.cloud.retail.v2alpha.Product.verify(message.product);
+                                var error = $root.google.cloud.retail.v2alpha.Product.verify(message.product, long + 1);
                                 if (error)
                                     return "product." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -118431,19 +123483,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateProductRequest} UpdateProductRequest
                          */
-                        UpdateProductRequest.fromObject = function fromObject(object) {
+                        UpdateProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateProductRequest();
                             if (object.product != null) {
                                 if (typeof object.product !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateProductRequest.product: object expected");
-                                message.product = $root.google.cloud.retail.v2alpha.Product.fromObject(object.product);
+                                message.product = $root.google.cloud.retail.v2alpha.Product.fromObject(object.product, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateProductRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -118527,7 +123583,7 @@
                         function DeleteProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -118602,9 +123658,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteProductRequest.decode = function decode(reader, length, error) {
+                        DeleteProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.DeleteProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -118620,7 +123680,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -118651,9 +123711,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteProductRequest.verify = function verify(message) {
+                        DeleteProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -118671,9 +123735,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.DeleteProductRequest} DeleteProductRequest
                          */
-                        DeleteProductRequest.fromObject = function fromObject(object) {
+                        DeleteProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.DeleteProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.DeleteProductRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -118760,7 +123828,7 @@
                         function ListProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -118875,9 +123943,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListProductsRequest.decode = function decode(reader, length, error) {
+                        ListProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -118901,7 +123973,7 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.readMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.readMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
@@ -118909,7 +123981,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -118940,9 +124012,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListProductsRequest.verify = function verify(message) {
+                        ListProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -118956,7 +124032,7 @@
                                 if (!$util.isString(message.filter))
                                     return "filter: string expected";
                             if (message.readMask != null && message.hasOwnProperty("readMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.readMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.readMask, long + 1);
                                 if (error)
                                     return "readMask." + error;
                             }
@@ -118974,9 +124050,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListProductsRequest} ListProductsRequest
                          */
-                        ListProductsRequest.fromObject = function fromObject(object) {
+                        ListProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -118989,7 +124069,7 @@
                             if (object.readMask != null) {
                                 if (typeof object.readMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ListProductsRequest.readMask: object expected");
-                                message.readMask = $root.google.protobuf.FieldMask.fromObject(object.readMask);
+                                message.readMask = $root.google.protobuf.FieldMask.fromObject(object.readMask, long + 1);
                             }
                             if (object.requireTotalSize != null)
                                 message.requireTotalSize = Boolean(object.requireTotalSize);
@@ -119084,7 +124164,7 @@
                             this.products = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -119170,9 +124250,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListProductsResponse.decode = function decode(reader, length, error) {
+                        ListProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -119182,7 +124266,7 @@
                                 case 1: {
                                         if (!(message.products && message.products.length))
                                             message.products = [];
-                                        message.products.push($root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32()));
+                                        message.products.push($root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -119194,7 +124278,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -119225,14 +124309,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListProductsResponse.verify = function verify(message) {
+                        ListProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.products != null && message.hasOwnProperty("products")) {
                                 if (!Array.isArray(message.products))
                                     return "products: array expected";
                                 for (var i = 0; i < message.products.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.Product.verify(message.products[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.Product.verify(message.products[i], long + 1);
                                     if (error)
                                         return "products." + error;
                                 }
@@ -119254,9 +124342,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListProductsResponse} ListProductsResponse
                          */
-                        ListProductsResponse.fromObject = function fromObject(object) {
+                        ListProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListProductsResponse();
                             if (object.products) {
                                 if (!Array.isArray(object.products))
@@ -119265,7 +124357,7 @@
                                 for (var i = 0; i < object.products.length; ++i) {
                                     if (typeof object.products[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ListProductsResponse.products: object expected");
-                                    message.products[i] = $root.google.cloud.retail.v2alpha.Product.fromObject(object.products[i]);
+                                    message.products[i] = $root.google.cloud.retail.v2alpha.Product.fromObject(object.products[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -119358,7 +124450,7 @@
                         function SetInventoryRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -119453,9 +124545,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetInventoryRequest.decode = function decode(reader, length, error) {
+                        SetInventoryRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SetInventoryRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -119463,15 +124559,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.inventory = $root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32());
+                                        message.inventory = $root.google.cloud.retail.v2alpha.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.setMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.setMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
@@ -119479,7 +124575,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -119510,21 +124606,25 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetInventoryRequest.verify = function verify(message) {
+                        SetInventoryRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.inventory != null && message.hasOwnProperty("inventory")) {
-                                var error = $root.google.cloud.retail.v2alpha.Product.verify(message.inventory);
+                                var error = $root.google.cloud.retail.v2alpha.Product.verify(message.inventory, long + 1);
                                 if (error)
                                     return "inventory." + error;
                             }
                             if (message.setMask != null && message.hasOwnProperty("setMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.setMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.setMask, long + 1);
                                 if (error)
                                     return "setMask." + error;
                             }
                             if (message.setTime != null && message.hasOwnProperty("setTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.setTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.setTime, long + 1);
                                 if (error)
                                     return "setTime." + error;
                             }
@@ -119542,24 +124642,28 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.SetInventoryRequest} SetInventoryRequest
                          */
-                        SetInventoryRequest.fromObject = function fromObject(object) {
+                        SetInventoryRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.SetInventoryRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.SetInventoryRequest();
                             if (object.inventory != null) {
                                 if (typeof object.inventory !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SetInventoryRequest.inventory: object expected");
-                                message.inventory = $root.google.cloud.retail.v2alpha.Product.fromObject(object.inventory);
+                                message.inventory = $root.google.cloud.retail.v2alpha.Product.fromObject(object.inventory, long + 1);
                             }
                             if (object.setMask != null) {
                                 if (typeof object.setMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SetInventoryRequest.setMask: object expected");
-                                message.setMask = $root.google.protobuf.FieldMask.fromObject(object.setMask);
+                                message.setMask = $root.google.protobuf.FieldMask.fromObject(object.setMask, long + 1);
                             }
                             if (object.setTime != null) {
                                 if (typeof object.setTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.SetInventoryRequest.setTime: object expected");
-                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime);
+                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -119644,7 +124748,7 @@
                         function SetInventoryMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -119699,9 +124803,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetInventoryMetadata.decode = function decode(reader, length, error) {
+                        SetInventoryMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SetInventoryMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -119709,7 +124817,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -119740,9 +124848,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetInventoryMetadata.verify = function verify(message) {
+                        SetInventoryMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -119754,9 +124866,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.SetInventoryMetadata} SetInventoryMetadata
                          */
-                        SetInventoryMetadata.fromObject = function fromObject(object) {
+                        SetInventoryMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.SetInventoryMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.SetInventoryMetadata();
                         };
     
@@ -119821,7 +124937,7 @@
                         function SetInventoryResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -119876,9 +124992,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetInventoryResponse.decode = function decode(reader, length, error) {
+                        SetInventoryResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.SetInventoryResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -119886,7 +125006,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -119917,9 +125037,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetInventoryResponse.verify = function verify(message) {
+                        SetInventoryResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -119931,9 +125055,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.SetInventoryResponse} SetInventoryResponse
                          */
-                        SetInventoryResponse.fromObject = function fromObject(object) {
+                        SetInventoryResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.SetInventoryResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.SetInventoryResponse();
                         };
     
@@ -120004,7 +125132,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -120110,9 +125238,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddFulfillmentPlacesRequest.decode = function decode(reader, length, error) {
+                        AddFulfillmentPlacesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AddFulfillmentPlacesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -120134,7 +125266,7 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -120142,7 +125274,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -120173,9 +125305,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddFulfillmentPlacesRequest.verify = function verify(message) {
+                        AddFulfillmentPlacesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -120190,7 +125326,7 @@
                                         return "placeIds: string[] expected";
                             }
                             if (message.addTime != null && message.hasOwnProperty("addTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.addTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.addTime, long + 1);
                                 if (error)
                                     return "addTime." + error;
                             }
@@ -120208,9 +125344,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AddFulfillmentPlacesRequest} AddFulfillmentPlacesRequest
                          */
-                        AddFulfillmentPlacesRequest.fromObject = function fromObject(object) {
+                        AddFulfillmentPlacesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AddFulfillmentPlacesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.AddFulfillmentPlacesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -120226,7 +125366,7 @@
                             if (object.addTime != null) {
                                 if (typeof object.addTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.AddFulfillmentPlacesRequest.addTime: object expected");
-                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime);
+                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -120318,7 +125458,7 @@
                         function AddFulfillmentPlacesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -120373,9 +125513,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddFulfillmentPlacesMetadata.decode = function decode(reader, length, error) {
+                        AddFulfillmentPlacesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AddFulfillmentPlacesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -120383,7 +125527,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -120414,9 +125558,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddFulfillmentPlacesMetadata.verify = function verify(message) {
+                        AddFulfillmentPlacesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -120428,9 +125576,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AddFulfillmentPlacesMetadata} AddFulfillmentPlacesMetadata
                          */
-                        AddFulfillmentPlacesMetadata.fromObject = function fromObject(object) {
+                        AddFulfillmentPlacesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AddFulfillmentPlacesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.AddFulfillmentPlacesMetadata();
                         };
     
@@ -120495,7 +125647,7 @@
                         function AddFulfillmentPlacesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -120550,9 +125702,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddFulfillmentPlacesResponse.decode = function decode(reader, length, error) {
+                        AddFulfillmentPlacesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AddFulfillmentPlacesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -120560,7 +125716,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -120591,9 +125747,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddFulfillmentPlacesResponse.verify = function verify(message) {
+                        AddFulfillmentPlacesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -120605,9 +125765,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AddFulfillmentPlacesResponse} AddFulfillmentPlacesResponse
                          */
-                        AddFulfillmentPlacesResponse.fromObject = function fromObject(object) {
+                        AddFulfillmentPlacesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AddFulfillmentPlacesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.AddFulfillmentPlacesResponse();
                         };
     
@@ -120678,7 +125842,7 @@
                             this.localInventories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -120784,9 +125948,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddLocalInventoriesRequest.decode = function decode(reader, length, error) {
+                        AddLocalInventoriesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AddLocalInventoriesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -120800,15 +125968,15 @@
                                 case 2: {
                                         if (!(message.localInventories && message.localInventories.length))
                                             message.localInventories = [];
-                                        message.localInventories.push($root.google.cloud.retail.v2alpha.LocalInventory.decode(reader, reader.uint32()));
+                                        message.localInventories.push($root.google.cloud.retail.v2alpha.LocalInventory.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 4: {
-                                        message.addMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.addMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
-                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
@@ -120816,7 +125984,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -120847,9 +126015,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddLocalInventoriesRequest.verify = function verify(message) {
+                        AddLocalInventoriesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -120857,18 +126029,18 @@
                                 if (!Array.isArray(message.localInventories))
                                     return "localInventories: array expected";
                                 for (var i = 0; i < message.localInventories.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.LocalInventory.verify(message.localInventories[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.LocalInventory.verify(message.localInventories[i], long + 1);
                                     if (error)
                                         return "localInventories." + error;
                                 }
                             }
                             if (message.addMask != null && message.hasOwnProperty("addMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.addMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.addMask, long + 1);
                                 if (error)
                                     return "addMask." + error;
                             }
                             if (message.addTime != null && message.hasOwnProperty("addTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.addTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.addTime, long + 1);
                                 if (error)
                                     return "addTime." + error;
                             }
@@ -120886,9 +126058,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AddLocalInventoriesRequest} AddLocalInventoriesRequest
                          */
-                        AddLocalInventoriesRequest.fromObject = function fromObject(object) {
+                        AddLocalInventoriesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AddLocalInventoriesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.AddLocalInventoriesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -120899,18 +126075,18 @@
                                 for (var i = 0; i < object.localInventories.length; ++i) {
                                     if (typeof object.localInventories[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.AddLocalInventoriesRequest.localInventories: object expected");
-                                    message.localInventories[i] = $root.google.cloud.retail.v2alpha.LocalInventory.fromObject(object.localInventories[i]);
+                                    message.localInventories[i] = $root.google.cloud.retail.v2alpha.LocalInventory.fromObject(object.localInventories[i], long + 1);
                                 }
                             }
                             if (object.addMask != null) {
                                 if (typeof object.addMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.AddLocalInventoriesRequest.addMask: object expected");
-                                message.addMask = $root.google.protobuf.FieldMask.fromObject(object.addMask);
+                                message.addMask = $root.google.protobuf.FieldMask.fromObject(object.addMask, long + 1);
                             }
                             if (object.addTime != null) {
                                 if (typeof object.addTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.AddLocalInventoriesRequest.addTime: object expected");
-                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime);
+                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -121002,7 +126178,7 @@
                         function AddLocalInventoriesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -121057,9 +126233,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddLocalInventoriesMetadata.decode = function decode(reader, length, error) {
+                        AddLocalInventoriesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AddLocalInventoriesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -121067,7 +126247,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -121098,9 +126278,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddLocalInventoriesMetadata.verify = function verify(message) {
+                        AddLocalInventoriesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -121112,9 +126296,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AddLocalInventoriesMetadata} AddLocalInventoriesMetadata
                          */
-                        AddLocalInventoriesMetadata.fromObject = function fromObject(object) {
+                        AddLocalInventoriesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AddLocalInventoriesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.AddLocalInventoriesMetadata();
                         };
     
@@ -121179,7 +126367,7 @@
                         function AddLocalInventoriesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -121234,9 +126422,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddLocalInventoriesResponse.decode = function decode(reader, length, error) {
+                        AddLocalInventoriesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AddLocalInventoriesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -121244,7 +126436,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -121275,9 +126467,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddLocalInventoriesResponse.verify = function verify(message) {
+                        AddLocalInventoriesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -121289,9 +126485,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AddLocalInventoriesResponse} AddLocalInventoriesResponse
                          */
-                        AddLocalInventoriesResponse.fromObject = function fromObject(object) {
+                        AddLocalInventoriesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AddLocalInventoriesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.AddLocalInventoriesResponse();
                         };
     
@@ -121361,7 +126561,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -121457,9 +126657,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveLocalInventoriesRequest.decode = function decode(reader, length, error) {
+                        RemoveLocalInventoriesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RemoveLocalInventoriesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -121477,7 +126681,7 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -121485,7 +126689,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -121516,9 +126720,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveLocalInventoriesRequest.verify = function verify(message) {
+                        RemoveLocalInventoriesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -121530,7 +126738,7 @@
                                         return "placeIds: string[] expected";
                             }
                             if (message.removeTime != null && message.hasOwnProperty("removeTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime, long + 1);
                                 if (error)
                                     return "removeTime." + error;
                             }
@@ -121548,9 +126756,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RemoveLocalInventoriesRequest} RemoveLocalInventoriesRequest
                          */
-                        RemoveLocalInventoriesRequest.fromObject = function fromObject(object) {
+                        RemoveLocalInventoriesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RemoveLocalInventoriesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.RemoveLocalInventoriesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -121564,7 +126776,7 @@
                             if (object.removeTime != null) {
                                 if (typeof object.removeTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.RemoveLocalInventoriesRequest.removeTime: object expected");
-                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime);
+                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -121653,7 +126865,7 @@
                         function RemoveLocalInventoriesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -121708,9 +126920,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveLocalInventoriesMetadata.decode = function decode(reader, length, error) {
+                        RemoveLocalInventoriesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RemoveLocalInventoriesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -121718,7 +126934,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -121749,9 +126965,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveLocalInventoriesMetadata.verify = function verify(message) {
+                        RemoveLocalInventoriesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -121763,9 +126983,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RemoveLocalInventoriesMetadata} RemoveLocalInventoriesMetadata
                          */
-                        RemoveLocalInventoriesMetadata.fromObject = function fromObject(object) {
+                        RemoveLocalInventoriesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RemoveLocalInventoriesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.RemoveLocalInventoriesMetadata();
                         };
     
@@ -121830,7 +127054,7 @@
                         function RemoveLocalInventoriesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -121885,9 +127109,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveLocalInventoriesResponse.decode = function decode(reader, length, error) {
+                        RemoveLocalInventoriesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RemoveLocalInventoriesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -121895,7 +127123,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -121926,9 +127154,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveLocalInventoriesResponse.verify = function verify(message) {
+                        RemoveLocalInventoriesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -121940,9 +127172,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RemoveLocalInventoriesResponse} RemoveLocalInventoriesResponse
                          */
-                        RemoveLocalInventoriesResponse.fromObject = function fromObject(object) {
+                        RemoveLocalInventoriesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RemoveLocalInventoriesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.RemoveLocalInventoriesResponse();
                         };
     
@@ -122013,7 +127249,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -122119,9 +127355,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveFulfillmentPlacesRequest.decode = function decode(reader, length, error) {
+                        RemoveFulfillmentPlacesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RemoveFulfillmentPlacesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -122143,7 +127383,7 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -122151,7 +127391,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -122182,9 +127422,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveFulfillmentPlacesRequest.verify = function verify(message) {
+                        RemoveFulfillmentPlacesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -122199,7 +127443,7 @@
                                         return "placeIds: string[] expected";
                             }
                             if (message.removeTime != null && message.hasOwnProperty("removeTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime, long + 1);
                                 if (error)
                                     return "removeTime." + error;
                             }
@@ -122217,9 +127461,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RemoveFulfillmentPlacesRequest} RemoveFulfillmentPlacesRequest
                          */
-                        RemoveFulfillmentPlacesRequest.fromObject = function fromObject(object) {
+                        RemoveFulfillmentPlacesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RemoveFulfillmentPlacesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.RemoveFulfillmentPlacesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -122235,7 +127483,7 @@
                             if (object.removeTime != null) {
                                 if (typeof object.removeTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.RemoveFulfillmentPlacesRequest.removeTime: object expected");
-                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime);
+                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -122327,7 +127575,7 @@
                         function RemoveFulfillmentPlacesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -122382,9 +127630,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveFulfillmentPlacesMetadata.decode = function decode(reader, length, error) {
+                        RemoveFulfillmentPlacesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RemoveFulfillmentPlacesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -122392,7 +127644,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -122423,9 +127675,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveFulfillmentPlacesMetadata.verify = function verify(message) {
+                        RemoveFulfillmentPlacesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -122437,9 +127693,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RemoveFulfillmentPlacesMetadata} RemoveFulfillmentPlacesMetadata
                          */
-                        RemoveFulfillmentPlacesMetadata.fromObject = function fromObject(object) {
+                        RemoveFulfillmentPlacesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RemoveFulfillmentPlacesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.RemoveFulfillmentPlacesMetadata();
                         };
     
@@ -122504,7 +127764,7 @@
                         function RemoveFulfillmentPlacesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -122559,9 +127819,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveFulfillmentPlacesResponse.decode = function decode(reader, length, error) {
+                        RemoveFulfillmentPlacesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RemoveFulfillmentPlacesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -122569,7 +127833,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -122600,9 +127864,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveFulfillmentPlacesResponse.verify = function verify(message) {
+                        RemoveFulfillmentPlacesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -122614,9 +127882,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RemoveFulfillmentPlacesResponse} RemoveFulfillmentPlacesResponse
                          */
-                        RemoveFulfillmentPlacesResponse.fromObject = function fromObject(object) {
+                        RemoveFulfillmentPlacesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RemoveFulfillmentPlacesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.RemoveFulfillmentPlacesResponse();
                         };
     
@@ -122681,7 +127953,7 @@
                         function PurgeMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -122736,9 +128008,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeMetadata.decode = function decode(reader, length, error) {
+                        PurgeMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PurgeMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -122746,7 +128022,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -122777,9 +128053,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeMetadata.verify = function verify(message) {
+                        PurgeMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -122791,9 +128071,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PurgeMetadata} PurgeMetadata
                          */
-                        PurgeMetadata.fromObject = function fromObject(object) {
+                        PurgeMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PurgeMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.PurgeMetadata();
                         };
     
@@ -122862,7 +128146,7 @@
                         function PurgeProductsMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -122957,9 +128241,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeProductsMetadata.decode = function decode(reader, length, error) {
+                        PurgeProductsMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PurgeProductsMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -122967,11 +128255,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -122983,7 +128271,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -123014,16 +128302,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeProductsMetadata.verify = function verify(message) {
+                        PurgeProductsMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -123044,19 +128336,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PurgeProductsMetadata} PurgeProductsMetadata
                          */
-                        PurgeProductsMetadata.fromObject = function fromObject(object) {
+                        PurgeProductsMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PurgeProductsMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PurgeProductsMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.PurgeProductsMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.PurgeProductsMetadata.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.successCount != null)
                                 if ($util.Long)
@@ -123174,7 +128470,7 @@
                         function PurgeProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -123259,9 +128555,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeProductsRequest.decode = function decode(reader, length, error) {
+                        PurgeProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PurgeProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -123281,7 +128581,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -123312,9 +128612,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeProductsRequest.verify = function verify(message) {
+                        PurgeProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -123335,9 +128639,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PurgeProductsRequest} PurgeProductsRequest
                          */
-                        PurgeProductsRequest.fromObject = function fromObject(object) {
+                        PurgeProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PurgeProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PurgeProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -123426,7 +128734,7 @@
                             this.purgeSample = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -123502,9 +128810,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeProductsResponse.decode = function decode(reader, length, error) {
+                        PurgeProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PurgeProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -123522,7 +128834,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -123553,9 +128865,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeProductsResponse.verify = function verify(message) {
+                        PurgeProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.purgeCount != null && message.hasOwnProperty("purgeCount"))
                                 if (!$util.isInteger(message.purgeCount) && !(message.purgeCount && $util.isInteger(message.purgeCount.low) && $util.isInteger(message.purgeCount.high)))
                                     return "purgeCount: integer|Long expected";
@@ -123577,9 +128893,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PurgeProductsResponse} PurgeProductsResponse
                          */
-                        PurgeProductsResponse.fromObject = function fromObject(object) {
+                        PurgeProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PurgeProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PurgeProductsResponse();
                             if (object.purgeCount != null)
                                 if ($util.Long)
@@ -123685,7 +129005,7 @@
                         function PurgeUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -123770,9 +129090,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeUserEventsRequest.decode = function decode(reader, length, error) {
+                        PurgeUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PurgeUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -123792,7 +129116,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -123823,9 +129147,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeUserEventsRequest.verify = function verify(message) {
+                        PurgeUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -123846,9 +129174,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PurgeUserEventsRequest} PurgeUserEventsRequest
                          */
-                        PurgeUserEventsRequest.fromObject = function fromObject(object) {
+                        PurgeUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PurgeUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PurgeUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -123935,7 +129267,7 @@
                         function PurgeUserEventsResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -124000,9 +129332,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeUserEventsResponse.decode = function decode(reader, length, error) {
+                        PurgeUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.PurgeUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -124014,7 +129350,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -124045,9 +129381,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeUserEventsResponse.verify = function verify(message) {
+                        PurgeUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.purgedEventsCount != null && message.hasOwnProperty("purgedEventsCount"))
                                 if (!$util.isInteger(message.purgedEventsCount) && !(message.purgedEventsCount && $util.isInteger(message.purgedEventsCount.low) && $util.isInteger(message.purgedEventsCount.high)))
                                     return "purgedEventsCount: integer|Long expected";
@@ -124062,9 +129402,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.PurgeUserEventsResponse} PurgeUserEventsResponse
                          */
-                        PurgeUserEventsResponse.fromObject = function fromObject(object) {
+                        PurgeUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.PurgeUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.PurgeUserEventsResponse();
                             if (object.purgedEventsCount != null)
                                 if ($util.Long)
@@ -124157,7 +129501,7 @@
                             this.serviceLogGenerationRules = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -124243,9 +129587,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        LoggingConfig.decode = function decode(reader, length, error) {
+                        LoggingConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.LoggingConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -124257,17 +129605,17 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.defaultLogGenerationRule = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.decode(reader, reader.uint32());
+                                        message.defaultLogGenerationRule = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
                                         if (!(message.serviceLogGenerationRules && message.serviceLogGenerationRules.length))
                                             message.serviceLogGenerationRules = [];
-                                        message.serviceLogGenerationRules.push($root.google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule.decode(reader, reader.uint32()));
+                                        message.serviceLogGenerationRules.push($root.google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -124298,14 +129646,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        LoggingConfig.verify = function verify(message) {
+                        LoggingConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
                             if (message.defaultLogGenerationRule != null && message.hasOwnProperty("defaultLogGenerationRule")) {
-                                var error = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.verify(message.defaultLogGenerationRule);
+                                var error = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.verify(message.defaultLogGenerationRule, long + 1);
                                 if (error)
                                     return "defaultLogGenerationRule." + error;
                             }
@@ -124313,7 +129665,7 @@
                                 if (!Array.isArray(message.serviceLogGenerationRules))
                                     return "serviceLogGenerationRules: array expected";
                                 for (var i = 0; i < message.serviceLogGenerationRules.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule.verify(message.serviceLogGenerationRules[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule.verify(message.serviceLogGenerationRules[i], long + 1);
                                     if (error)
                                         return "serviceLogGenerationRules." + error;
                                 }
@@ -124329,16 +129681,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.LoggingConfig} LoggingConfig
                          */
-                        LoggingConfig.fromObject = function fromObject(object) {
+                        LoggingConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.LoggingConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.LoggingConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
                             if (object.defaultLogGenerationRule != null) {
                                 if (typeof object.defaultLogGenerationRule !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.LoggingConfig.defaultLogGenerationRule: object expected");
-                                message.defaultLogGenerationRule = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.fromObject(object.defaultLogGenerationRule);
+                                message.defaultLogGenerationRule = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.fromObject(object.defaultLogGenerationRule, long + 1);
                             }
                             if (object.serviceLogGenerationRules) {
                                 if (!Array.isArray(object.serviceLogGenerationRules))
@@ -124347,7 +129703,7 @@
                                 for (var i = 0; i < object.serviceLogGenerationRules.length; ++i) {
                                     if (typeof object.serviceLogGenerationRules[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.LoggingConfig.serviceLogGenerationRules: object expected");
-                                    message.serviceLogGenerationRules[i] = $root.google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule.fromObject(object.serviceLogGenerationRules[i]);
+                                    message.serviceLogGenerationRules[i] = $root.google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule.fromObject(object.serviceLogGenerationRules[i], long + 1);
                                 }
                             }
                             return message;
@@ -124431,7 +129787,7 @@
                             function LogGenerationRule(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -124515,9 +129871,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            LogGenerationRule.decode = function decode(reader, length, error) {
+                            LogGenerationRule.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -124533,7 +129893,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -124564,9 +129924,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            LogGenerationRule.verify = function verify(message) {
+                            LogGenerationRule.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.loggingLevel != null && message.hasOwnProperty("loggingLevel"))
                                     switch (message.loggingLevel) {
@@ -124595,9 +129959,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule} LogGenerationRule
                              */
-                            LogGenerationRule.fromObject = function fromObject(object) {
+                            LogGenerationRule.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule();
                                 switch (object.loggingLevel) {
                                 default:
@@ -124707,7 +130075,7 @@
                             function ServiceLogGenerationRule(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -124782,9 +130150,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ServiceLogGenerationRule.decode = function decode(reader, length, error) {
+                            ServiceLogGenerationRule.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -124796,11 +130168,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.logGenerationRule = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.decode(reader, reader.uint32());
+                                            message.logGenerationRule = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -124831,14 +130203,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ServiceLogGenerationRule.verify = function verify(message) {
+                            ServiceLogGenerationRule.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.serviceName != null && message.hasOwnProperty("serviceName"))
                                     if (!$util.isString(message.serviceName))
                                         return "serviceName: string expected";
                                 if (message.logGenerationRule != null && message.hasOwnProperty("logGenerationRule")) {
-                                    var error = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.verify(message.logGenerationRule);
+                                    var error = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.verify(message.logGenerationRule, long + 1);
                                     if (error)
                                         return "logGenerationRule." + error;
                                 }
@@ -124853,16 +130229,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule} ServiceLogGenerationRule
                              */
-                            ServiceLogGenerationRule.fromObject = function fromObject(object) {
+                            ServiceLogGenerationRule.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule();
                                 if (object.serviceName != null)
                                     message.serviceName = String(object.serviceName);
                                 if (object.logGenerationRule != null) {
                                     if (typeof object.logGenerationRule !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.LoggingConfig.ServiceLogGenerationRule.logGenerationRule: object expected");
-                                    message.logGenerationRule = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.fromObject(object.logGenerationRule);
+                                    message.logGenerationRule = $root.google.cloud.retail.v2alpha.LoggingConfig.LogGenerationRule.fromObject(object.logGenerationRule, long + 1);
                                 }
                                 return message;
                             };
@@ -124965,7 +130345,7 @@
                             this.enrolledSolutions = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -125044,9 +130424,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Project.decode = function decode(reader, length, error) {
+                        Project.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.Project();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -125069,7 +130453,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -125100,9 +130484,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Project.verify = function verify(message) {
+                        Project.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -125130,9 +130518,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.Project} Project
                          */
-                        Project.fromObject = function fromObject(object) {
+                        Project.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.Project)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.Project();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -125242,7 +130634,7 @@
                             this.alertPolicies = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -125318,9 +130710,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AlertConfig.decode = function decode(reader, length, error) {
+                        AlertConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AlertConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -125334,11 +130730,11 @@
                                 case 2: {
                                         if (!(message.alertPolicies && message.alertPolicies.length))
                                             message.alertPolicies = [];
-                                        message.alertPolicies.push($root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.decode(reader, reader.uint32()));
+                                        message.alertPolicies.push($root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -125369,9 +130765,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AlertConfig.verify = function verify(message) {
+                        AlertConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -125379,7 +130779,7 @@
                                 if (!Array.isArray(message.alertPolicies))
                                     return "alertPolicies: array expected";
                                 for (var i = 0; i < message.alertPolicies.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.verify(message.alertPolicies[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.verify(message.alertPolicies[i], long + 1);
                                     if (error)
                                         return "alertPolicies." + error;
                                 }
@@ -125395,9 +130795,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AlertConfig} AlertConfig
                          */
-                        AlertConfig.fromObject = function fromObject(object) {
+                        AlertConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AlertConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.AlertConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -125408,7 +130812,7 @@
                                 for (var i = 0; i < object.alertPolicies.length; ++i) {
                                     if (typeof object.alertPolicies[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.AlertConfig.alertPolicies: object expected");
-                                    message.alertPolicies[i] = $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.fromObject(object.alertPolicies[i]);
+                                    message.alertPolicies[i] = $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.fromObject(object.alertPolicies[i], long + 1);
                                 }
                             }
                             return message;
@@ -125490,7 +130894,7 @@
                                 this.recipients = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -125576,9 +130980,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            AlertPolicy.decode = function decode(reader, length, error) {
+                            AlertPolicy.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -125596,11 +131004,11 @@
                                     case 3: {
                                             if (!(message.recipients && message.recipients.length))
                                                 message.recipients = [];
-                                            message.recipients.push($root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.Recipient.decode(reader, reader.uint32()));
+                                            message.recipients.push($root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.Recipient.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -125631,9 +131039,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            AlertPolicy.verify = function verify(message) {
+                            AlertPolicy.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.alertGroup != null && message.hasOwnProperty("alertGroup"))
                                     if (!$util.isString(message.alertGroup))
                                         return "alertGroup: string expected";
@@ -125650,7 +131062,7 @@
                                     if (!Array.isArray(message.recipients))
                                         return "recipients: array expected";
                                     for (var i = 0; i < message.recipients.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.Recipient.verify(message.recipients[i]);
+                                        var error = $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.Recipient.verify(message.recipients[i], long + 1);
                                         if (error)
                                             return "recipients." + error;
                                     }
@@ -125666,9 +131078,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2alpha.AlertConfig.AlertPolicy} AlertPolicy
                              */
-                            AlertPolicy.fromObject = function fromObject(object) {
+                            AlertPolicy.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy();
                                 if (object.alertGroup != null)
                                     message.alertGroup = String(object.alertGroup);
@@ -125699,7 +131115,7 @@
                                     for (var i = 0; i < object.recipients.length; ++i) {
                                         if (typeof object.recipients[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.recipients: object expected");
-                                        message.recipients[i] = $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.Recipient.fromObject(object.recipients[i]);
+                                        message.recipients[i] = $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.Recipient.fromObject(object.recipients[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -125782,7 +131198,7 @@
                                 function Recipient(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -125847,9 +131263,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                Recipient.decode = function decode(reader, length, error) {
+                                Recipient.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.Recipient();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -125861,7 +131281,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -125892,9 +131312,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                Recipient.verify = function verify(message) {
+                                Recipient.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.emailAddress != null && message.hasOwnProperty("emailAddress"))
                                         if (!$util.isString(message.emailAddress))
                                             return "emailAddress: string expected";
@@ -125909,9 +131333,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.Recipient} Recipient
                                  */
-                                Recipient.fromObject = function fromObject(object) {
+                                Recipient.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.Recipient)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2alpha.AlertConfig.AlertPolicy.Recipient();
                                     if (object.emailAddress != null)
                                         message.emailAddress = String(object.emailAddress);
@@ -126308,7 +131736,7 @@
                         function GetProjectRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -126373,9 +131801,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetProjectRequest.decode = function decode(reader, length, error) {
+                        GetProjectRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetProjectRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -126387,7 +131819,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -126418,9 +131850,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetProjectRequest.verify = function verify(message) {
+                        GetProjectRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -126435,9 +131871,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetProjectRequest} GetProjectRequest
                          */
-                        GetProjectRequest.fromObject = function fromObject(object) {
+                        GetProjectRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetProjectRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetProjectRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -126513,7 +131953,7 @@
                         function AcceptTermsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -126578,9 +132018,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AcceptTermsRequest.decode = function decode(reader, length, error) {
+                        AcceptTermsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AcceptTermsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -126592,7 +132036,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -126623,9 +132067,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AcceptTermsRequest.verify = function verify(message) {
+                        AcceptTermsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.project != null && message.hasOwnProperty("project"))
                                 if (!$util.isString(message.project))
                                     return "project: string expected";
@@ -126640,9 +132088,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AcceptTermsRequest} AcceptTermsRequest
                          */
-                        AcceptTermsRequest.fromObject = function fromObject(object) {
+                        AcceptTermsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AcceptTermsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.AcceptTermsRequest();
                             if (object.project != null)
                                 message.project = String(object.project);
@@ -126719,7 +132171,7 @@
                         function EnrollSolutionRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -126794,9 +132246,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        EnrollSolutionRequest.decode = function decode(reader, length, error) {
+                        EnrollSolutionRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.EnrollSolutionRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -126812,7 +132268,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -126843,9 +132299,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        EnrollSolutionRequest.verify = function verify(message) {
+                        EnrollSolutionRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.project != null && message.hasOwnProperty("project"))
                                 if (!$util.isString(message.project))
                                     return "project: string expected";
@@ -126869,9 +132329,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.EnrollSolutionRequest} EnrollSolutionRequest
                          */
-                        EnrollSolutionRequest.fromObject = function fromObject(object) {
+                        EnrollSolutionRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.EnrollSolutionRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.EnrollSolutionRequest();
                             if (object.project != null)
                                 message.project = String(object.project);
@@ -126971,7 +132435,7 @@
                         function EnrollSolutionResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -127036,9 +132500,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        EnrollSolutionResponse.decode = function decode(reader, length, error) {
+                        EnrollSolutionResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.EnrollSolutionResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -127050,7 +132518,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -127081,9 +132549,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        EnrollSolutionResponse.verify = function verify(message) {
+                        EnrollSolutionResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.enrolledSolution != null && message.hasOwnProperty("enrolledSolution"))
                                 switch (message.enrolledSolution) {
                                 default:
@@ -127104,9 +132576,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.EnrollSolutionResponse} EnrollSolutionResponse
                          */
-                        EnrollSolutionResponse.fromObject = function fromObject(object) {
+                        EnrollSolutionResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.EnrollSolutionResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.EnrollSolutionResponse();
                             switch (object.enrolledSolution) {
                             default:
@@ -127199,7 +132675,7 @@
                         function EnrollSolutionMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -127254,9 +132730,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        EnrollSolutionMetadata.decode = function decode(reader, length, error) {
+                        EnrollSolutionMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.EnrollSolutionMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -127264,7 +132744,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -127295,9 +132775,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        EnrollSolutionMetadata.verify = function verify(message) {
+                        EnrollSolutionMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -127309,9 +132793,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.EnrollSolutionMetadata} EnrollSolutionMetadata
                          */
-                        EnrollSolutionMetadata.fromObject = function fromObject(object) {
+                        EnrollSolutionMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.EnrollSolutionMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.EnrollSolutionMetadata();
                         };
     
@@ -127377,7 +132865,7 @@
                         function ListEnrolledSolutionsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -127442,9 +132930,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListEnrolledSolutionsRequest.decode = function decode(reader, length, error) {
+                        ListEnrolledSolutionsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListEnrolledSolutionsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -127456,7 +132948,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -127487,9 +132979,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListEnrolledSolutionsRequest.verify = function verify(message) {
+                        ListEnrolledSolutionsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -127504,9 +133000,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListEnrolledSolutionsRequest} ListEnrolledSolutionsRequest
                          */
-                        ListEnrolledSolutionsRequest.fromObject = function fromObject(object) {
+                        ListEnrolledSolutionsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListEnrolledSolutionsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListEnrolledSolutionsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -127583,7 +133083,7 @@
                             this.enrolledSolutions = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -127652,9 +133152,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListEnrolledSolutionsResponse.decode = function decode(reader, length, error) {
+                        ListEnrolledSolutionsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListEnrolledSolutionsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -127673,7 +133177,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -127704,9 +133208,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListEnrolledSolutionsResponse.verify = function verify(message) {
+                        ListEnrolledSolutionsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.enrolledSolutions != null && message.hasOwnProperty("enrolledSolutions")) {
                                 if (!Array.isArray(message.enrolledSolutions))
                                     return "enrolledSolutions: array expected";
@@ -127731,9 +133239,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListEnrolledSolutionsResponse} ListEnrolledSolutionsResponse
                          */
-                        ListEnrolledSolutionsResponse.fromObject = function fromObject(object) {
+                        ListEnrolledSolutionsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListEnrolledSolutionsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListEnrolledSolutionsResponse();
                             if (object.enrolledSolutions) {
                                 if (!Array.isArray(object.enrolledSolutions))
@@ -127835,7 +133347,7 @@
                         function GetLoggingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -127900,9 +133412,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetLoggingConfigRequest.decode = function decode(reader, length, error) {
+                        GetLoggingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetLoggingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -127914,7 +133430,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -127945,9 +133461,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetLoggingConfigRequest.verify = function verify(message) {
+                        GetLoggingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -127962,9 +133482,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetLoggingConfigRequest} GetLoggingConfigRequest
                          */
-                        GetLoggingConfigRequest.fromObject = function fromObject(object) {
+                        GetLoggingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetLoggingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetLoggingConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -128041,7 +133565,7 @@
                         function UpdateLoggingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -128116,9 +133640,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateLoggingConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateLoggingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateLoggingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -128126,15 +133654,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.loggingConfig = $root.google.cloud.retail.v2alpha.LoggingConfig.decode(reader, reader.uint32());
+                                        message.loggingConfig = $root.google.cloud.retail.v2alpha.LoggingConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -128165,16 +133693,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateLoggingConfigRequest.verify = function verify(message) {
+                        UpdateLoggingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.loggingConfig != null && message.hasOwnProperty("loggingConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.LoggingConfig.verify(message.loggingConfig);
+                                var error = $root.google.cloud.retail.v2alpha.LoggingConfig.verify(message.loggingConfig, long + 1);
                                 if (error)
                                     return "loggingConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -128189,19 +133721,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateLoggingConfigRequest} UpdateLoggingConfigRequest
                          */
-                        UpdateLoggingConfigRequest.fromObject = function fromObject(object) {
+                        UpdateLoggingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateLoggingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateLoggingConfigRequest();
                             if (object.loggingConfig != null) {
                                 if (typeof object.loggingConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateLoggingConfigRequest.loggingConfig: object expected");
-                                message.loggingConfig = $root.google.cloud.retail.v2alpha.LoggingConfig.fromObject(object.loggingConfig);
+                                message.loggingConfig = $root.google.cloud.retail.v2alpha.LoggingConfig.fromObject(object.loggingConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateLoggingConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -128279,7 +133815,7 @@
                         function GetAlertConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -128344,9 +133880,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetAlertConfigRequest.decode = function decode(reader, length, error) {
+                        GetAlertConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetAlertConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -128358,7 +133898,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -128389,9 +133929,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetAlertConfigRequest.verify = function verify(message) {
+                        GetAlertConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -128406,9 +133950,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetAlertConfigRequest} GetAlertConfigRequest
                          */
-                        GetAlertConfigRequest.fromObject = function fromObject(object) {
+                        GetAlertConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetAlertConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetAlertConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -128485,7 +134033,7 @@
                         function UpdateAlertConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -128560,9 +134108,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateAlertConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateAlertConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateAlertConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -128570,15 +134122,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.alertConfig = $root.google.cloud.retail.v2alpha.AlertConfig.decode(reader, reader.uint32());
+                                        message.alertConfig = $root.google.cloud.retail.v2alpha.AlertConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -128609,16 +134161,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateAlertConfigRequest.verify = function verify(message) {
+                        UpdateAlertConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.alertConfig != null && message.hasOwnProperty("alertConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.AlertConfig.verify(message.alertConfig);
+                                var error = $root.google.cloud.retail.v2alpha.AlertConfig.verify(message.alertConfig, long + 1);
                                 if (error)
                                     return "alertConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -128633,19 +134189,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateAlertConfigRequest} UpdateAlertConfigRequest
                          */
-                        UpdateAlertConfigRequest.fromObject = function fromObject(object) {
+                        UpdateAlertConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateAlertConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateAlertConfigRequest();
                             if (object.alertConfig != null) {
                                 if (typeof object.alertConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateAlertConfigRequest.alertConfig: object expected");
-                                message.alertConfig = $root.google.cloud.retail.v2alpha.AlertConfig.fromObject(object.alertConfig);
+                                message.alertConfig = $root.google.cloud.retail.v2alpha.AlertConfig.fromObject(object.alertConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateAlertConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -128752,7 +134312,7 @@
                             this.solutionTypes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -129020,9 +134580,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ServingConfig.decode = function decode(reader, length, error) {
+                        ServingConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ServingConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -129052,7 +134616,7 @@
                                         break;
                                     }
                                 case 6: {
-                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32());
+                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -129120,7 +134684,7 @@
                                         break;
                                     }
                                 case 21: {
-                                        message.personalizationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32());
+                                        message.personalizationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
@@ -129135,7 +134699,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -129166,9 +134730,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ServingConfig.verify = function verify(message) {
+                        ServingConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -129189,7 +134757,7 @@
                                         return "facetControlIds: string[] expected";
                             }
                             if (message.dynamicFacetSpec != null && message.hasOwnProperty("dynamicFacetSpec")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec);
+                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec, long + 1);
                                 if (error)
                                     return "dynamicFacetSpec." + error;
                             }
@@ -129268,7 +134836,7 @@
                                 if (typeof message.ignoreRecsDenylist !== "boolean")
                                     return "ignoreRecsDenylist: boolean expected";
                             if (message.personalizationSpec != null && message.hasOwnProperty("personalizationSpec")) {
-                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec);
+                                var error = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec, long + 1);
                                 if (error)
                                     return "personalizationSpec." + error;
                             }
@@ -129296,9 +134864,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ServingConfig} ServingConfig
                          */
-                        ServingConfig.fromObject = function fromObject(object) {
+                        ServingConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ServingConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ServingConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -129318,7 +134890,7 @@
                             if (object.dynamicFacetSpec != null) {
                                 if (typeof object.dynamicFacetSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ServingConfig.dynamicFacetSpec: object expected");
-                                message.dynamicFacetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec);
+                                message.dynamicFacetSpec = $root.google.cloud.retail.v2alpha.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec, long + 1);
                             }
                             if (object.boostControlIds) {
                                 if (!Array.isArray(object.boostControlIds))
@@ -129405,7 +134977,7 @@
                             if (object.personalizationSpec != null) {
                                 if (typeof object.personalizationSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.ServingConfig.personalizationSpec: object expected");
-                                message.personalizationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec);
+                                message.personalizationSpec = $root.google.cloud.retail.v2alpha.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec, long + 1);
                             }
                             if (object.solutionTypes) {
                                 if (!Array.isArray(object.solutionTypes))
@@ -129878,7 +135450,7 @@
                         function CreateServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -129963,9 +135535,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateServingConfigRequest.decode = function decode(reader, length, error) {
+                        CreateServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CreateServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -129977,7 +135553,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.servingConfig = $root.google.cloud.retail.v2alpha.ServingConfig.decode(reader, reader.uint32());
+                                        message.servingConfig = $root.google.cloud.retail.v2alpha.ServingConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -129985,7 +135561,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -130016,14 +135592,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateServingConfigRequest.verify = function verify(message) {
+                        CreateServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ServingConfig.verify(message.servingConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ServingConfig.verify(message.servingConfig, long + 1);
                                 if (error)
                                     return "servingConfig." + error;
                             }
@@ -130041,16 +135621,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CreateServingConfigRequest} CreateServingConfigRequest
                          */
-                        CreateServingConfigRequest.fromObject = function fromObject(object) {
+                        CreateServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CreateServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CreateServingConfigRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.servingConfig != null) {
                                 if (typeof object.servingConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.CreateServingConfigRequest.servingConfig: object expected");
-                                message.servingConfig = $root.google.cloud.retail.v2alpha.ServingConfig.fromObject(object.servingConfig);
+                                message.servingConfig = $root.google.cloud.retail.v2alpha.ServingConfig.fromObject(object.servingConfig, long + 1);
                             }
                             if (object.servingConfigId != null)
                                 message.servingConfigId = String(object.servingConfigId);
@@ -130134,7 +135718,7 @@
                         function UpdateServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -130209,9 +135793,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateServingConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.UpdateServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -130219,15 +135807,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.servingConfig = $root.google.cloud.retail.v2alpha.ServingConfig.decode(reader, reader.uint32());
+                                        message.servingConfig = $root.google.cloud.retail.v2alpha.ServingConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -130258,16 +135846,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateServingConfigRequest.verify = function verify(message) {
+                        UpdateServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig")) {
-                                var error = $root.google.cloud.retail.v2alpha.ServingConfig.verify(message.servingConfig);
+                                var error = $root.google.cloud.retail.v2alpha.ServingConfig.verify(message.servingConfig, long + 1);
                                 if (error)
                                     return "servingConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -130282,19 +135874,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.UpdateServingConfigRequest} UpdateServingConfigRequest
                          */
-                        UpdateServingConfigRequest.fromObject = function fromObject(object) {
+                        UpdateServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.UpdateServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.UpdateServingConfigRequest();
                             if (object.servingConfig != null) {
                                 if (typeof object.servingConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateServingConfigRequest.servingConfig: object expected");
-                                message.servingConfig = $root.google.cloud.retail.v2alpha.ServingConfig.fromObject(object.servingConfig);
+                                message.servingConfig = $root.google.cloud.retail.v2alpha.ServingConfig.fromObject(object.servingConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.UpdateServingConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -130372,7 +135968,7 @@
                         function DeleteServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -130437,9 +136033,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteServingConfigRequest.decode = function decode(reader, length, error) {
+                        DeleteServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.DeleteServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -130451,7 +136051,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -130482,9 +136082,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteServingConfigRequest.verify = function verify(message) {
+                        DeleteServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -130499,9 +136103,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.DeleteServingConfigRequest} DeleteServingConfigRequest
                          */
-                        DeleteServingConfigRequest.fromObject = function fromObject(object) {
+                        DeleteServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.DeleteServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.DeleteServingConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -130577,7 +136185,7 @@
                         function GetServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -130642,9 +136250,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetServingConfigRequest.decode = function decode(reader, length, error) {
+                        GetServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.GetServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -130656,7 +136268,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -130687,9 +136299,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetServingConfigRequest.verify = function verify(message) {
+                        GetServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -130704,9 +136320,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.GetServingConfigRequest} GetServingConfigRequest
                          */
-                        GetServingConfigRequest.fromObject = function fromObject(object) {
+                        GetServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.GetServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.GetServingConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -130784,7 +136404,7 @@
                         function ListServingConfigsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -130869,9 +136489,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListServingConfigsRequest.decode = function decode(reader, length, error) {
+                        ListServingConfigsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListServingConfigsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -130891,7 +136515,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -130922,9 +136546,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListServingConfigsRequest.verify = function verify(message) {
+                        ListServingConfigsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -130945,9 +136573,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListServingConfigsRequest} ListServingConfigsRequest
                          */
-                        ListServingConfigsRequest.fromObject = function fromObject(object) {
+                        ListServingConfigsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListServingConfigsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListServingConfigsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -131036,7 +136668,7 @@
                             this.servingConfigs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -131112,9 +136744,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListServingConfigsResponse.decode = function decode(reader, length, error) {
+                        ListServingConfigsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.ListServingConfigsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -131124,7 +136760,7 @@
                                 case 1: {
                                         if (!(message.servingConfigs && message.servingConfigs.length))
                                             message.servingConfigs = [];
-                                        message.servingConfigs.push($root.google.cloud.retail.v2alpha.ServingConfig.decode(reader, reader.uint32()));
+                                        message.servingConfigs.push($root.google.cloud.retail.v2alpha.ServingConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -131132,7 +136768,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -131163,14 +136799,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListServingConfigsResponse.verify = function verify(message) {
+                        ListServingConfigsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfigs != null && message.hasOwnProperty("servingConfigs")) {
                                 if (!Array.isArray(message.servingConfigs))
                                     return "servingConfigs: array expected";
                                 for (var i = 0; i < message.servingConfigs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2alpha.ServingConfig.verify(message.servingConfigs[i]);
+                                    var error = $root.google.cloud.retail.v2alpha.ServingConfig.verify(message.servingConfigs[i], long + 1);
                                     if (error)
                                         return "servingConfigs." + error;
                                 }
@@ -131189,9 +136829,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.ListServingConfigsResponse} ListServingConfigsResponse
                          */
-                        ListServingConfigsResponse.fromObject = function fromObject(object) {
+                        ListServingConfigsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.ListServingConfigsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.ListServingConfigsResponse();
                             if (object.servingConfigs) {
                                 if (!Array.isArray(object.servingConfigs))
@@ -131200,7 +136844,7 @@
                                 for (var i = 0; i < object.servingConfigs.length; ++i) {
                                     if (typeof object.servingConfigs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2alpha.ListServingConfigsResponse.servingConfigs: object expected");
-                                    message.servingConfigs[i] = $root.google.cloud.retail.v2alpha.ServingConfig.fromObject(object.servingConfigs[i]);
+                                    message.servingConfigs[i] = $root.google.cloud.retail.v2alpha.ServingConfig.fromObject(object.servingConfigs[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -131285,7 +136929,7 @@
                         function AddControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -131360,9 +137004,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddControlRequest.decode = function decode(reader, length, error) {
+                        AddControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.AddControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -131378,7 +137026,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -131409,9 +137057,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddControlRequest.verify = function verify(message) {
+                        AddControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig"))
                                 if (!$util.isString(message.servingConfig))
                                     return "servingConfig: string expected";
@@ -131429,9 +137081,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.AddControlRequest} AddControlRequest
                          */
-                        AddControlRequest.fromObject = function fromObject(object) {
+                        AddControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.AddControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.AddControlRequest();
                             if (object.servingConfig != null)
                                 message.servingConfig = String(object.servingConfig);
@@ -131514,7 +137170,7 @@
                         function RemoveControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -131589,9 +137245,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveControlRequest.decode = function decode(reader, length, error) {
+                        RemoveControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RemoveControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -131607,7 +137267,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -131638,9 +137298,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveControlRequest.verify = function verify(message) {
+                        RemoveControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig"))
                                 if (!$util.isString(message.servingConfig))
                                     return "servingConfig: string expected";
@@ -131658,9 +137322,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RemoveControlRequest} RemoveControlRequest
                          */
-                        RemoveControlRequest.fromObject = function fromObject(object) {
+                        RemoveControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RemoveControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.RemoveControlRequest();
                             if (object.servingConfig != null)
                                 message.servingConfig = String(object.servingConfig);
@@ -131977,7 +137645,7 @@
                         function WriteUserEventRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -132062,9 +137730,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        WriteUserEventRequest.decode = function decode(reader, length, error) {
+                        WriteUserEventRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.WriteUserEventRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -132076,7 +137748,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.userEvent = $root.google.cloud.retail.v2alpha.UserEvent.decode(reader, reader.uint32());
+                                        message.userEvent = $root.google.cloud.retail.v2alpha.UserEvent.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -132084,7 +137756,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -132115,14 +137787,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        WriteUserEventRequest.verify = function verify(message) {
+                        WriteUserEventRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.userEvent != null && message.hasOwnProperty("userEvent")) {
-                                var error = $root.google.cloud.retail.v2alpha.UserEvent.verify(message.userEvent);
+                                var error = $root.google.cloud.retail.v2alpha.UserEvent.verify(message.userEvent, long + 1);
                                 if (error)
                                     return "userEvent." + error;
                             }
@@ -132140,16 +137816,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.WriteUserEventRequest} WriteUserEventRequest
                          */
-                        WriteUserEventRequest.fromObject = function fromObject(object) {
+                        WriteUserEventRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.WriteUserEventRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.WriteUserEventRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.userEvent != null) {
                                 if (typeof object.userEvent !== "object")
                                     throw TypeError(".google.cloud.retail.v2alpha.WriteUserEventRequest.userEvent: object expected");
-                                message.userEvent = $root.google.cloud.retail.v2alpha.UserEvent.fromObject(object.userEvent);
+                                message.userEvent = $root.google.cloud.retail.v2alpha.UserEvent.fromObject(object.userEvent, long + 1);
                             }
                             if (object.writeAsync != null)
                                 message.writeAsync = Boolean(object.writeAsync);
@@ -132237,7 +137917,7 @@
                         function CollectUserEventRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -132366,9 +138046,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CollectUserEventRequest.decode = function decode(reader, length, error) {
+                        CollectUserEventRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.CollectUserEventRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -132400,7 +138084,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -132431,9 +138115,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CollectUserEventRequest.verify = function verify(message) {
+                        CollectUserEventRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.prebuiltRule != null && message.hasOwnProperty("prebuiltRule")) {
                                 properties.conversionRule = 1;
@@ -132466,9 +138154,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.CollectUserEventRequest} CollectUserEventRequest
                          */
-                        CollectUserEventRequest.fromObject = function fromObject(object) {
+                        CollectUserEventRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.CollectUserEventRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.CollectUserEventRequest();
                             if (object.prebuiltRule != null)
                                 message.prebuiltRule = String(object.prebuiltRule);
@@ -132587,7 +138279,7 @@
                         function RejoinUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -132662,9 +138354,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RejoinUserEventsRequest.decode = function decode(reader, length, error) {
+                        RejoinUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RejoinUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -132680,7 +138376,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -132711,9 +138407,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RejoinUserEventsRequest.verify = function verify(message) {
+                        RejoinUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -132737,9 +138437,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RejoinUserEventsRequest} RejoinUserEventsRequest
                          */
-                        RejoinUserEventsRequest.fromObject = function fromObject(object) {
+                        RejoinUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RejoinUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.RejoinUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -132855,7 +138559,7 @@
                         function RejoinUserEventsResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -132920,9 +138624,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RejoinUserEventsResponse.decode = function decode(reader, length, error) {
+                        RejoinUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RejoinUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -132934,7 +138642,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -132965,9 +138673,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RejoinUserEventsResponse.verify = function verify(message) {
+                        RejoinUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.rejoinedUserEventsCount != null && message.hasOwnProperty("rejoinedUserEventsCount"))
                                 if (!$util.isInteger(message.rejoinedUserEventsCount) && !(message.rejoinedUserEventsCount && $util.isInteger(message.rejoinedUserEventsCount.low) && $util.isInteger(message.rejoinedUserEventsCount.high)))
                                     return "rejoinedUserEventsCount: integer|Long expected";
@@ -132982,9 +138694,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RejoinUserEventsResponse} RejoinUserEventsResponse
                          */
-                        RejoinUserEventsResponse.fromObject = function fromObject(object) {
+                        RejoinUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RejoinUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2alpha.RejoinUserEventsResponse();
                             if (object.rejoinedUserEventsCount != null)
                                 if ($util.Long)
@@ -133073,7 +138789,7 @@
                         function RejoinUserEventsMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -133128,9 +138844,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RejoinUserEventsMetadata.decode = function decode(reader, length, error) {
+                        RejoinUserEventsMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2alpha.RejoinUserEventsMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -133138,7 +138858,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -133169,9 +138889,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RejoinUserEventsMetadata.verify = function verify(message) {
+                        RejoinUserEventsMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -133183,9 +138907,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2alpha.RejoinUserEventsMetadata} RejoinUserEventsMetadata
                          */
-                        RejoinUserEventsMetadata.fromObject = function fromObject(object) {
+                        RejoinUserEventsMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2alpha.RejoinUserEventsMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2alpha.RejoinUserEventsMetadata();
                         };
     
@@ -133332,7 +139060,7 @@
                         function OutputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -133421,9 +139149,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        OutputConfig.decode = function decode(reader, length, error) {
+                        OutputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.OutputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -133431,15 +139163,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.gcsDestination = $root.google.cloud.retail.v2beta.OutputConfig.GcsDestination.decode(reader, reader.uint32());
+                                        message.gcsDestination = $root.google.cloud.retail.v2beta.OutputConfig.GcsDestination.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.bigqueryDestination = $root.google.cloud.retail.v2beta.OutputConfig.BigQueryDestination.decode(reader, reader.uint32());
+                                        message.bigqueryDestination = $root.google.cloud.retail.v2beta.OutputConfig.BigQueryDestination.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -133470,14 +139202,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        OutputConfig.verify = function verify(message) {
+                        OutputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsDestination != null && message.hasOwnProperty("gcsDestination")) {
                                 properties.destination = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.OutputConfig.GcsDestination.verify(message.gcsDestination);
+                                    var error = $root.google.cloud.retail.v2beta.OutputConfig.GcsDestination.verify(message.gcsDestination, long + 1);
                                     if (error)
                                         return "gcsDestination." + error;
                                 }
@@ -133487,7 +139223,7 @@
                                     return "destination: multiple values";
                                 properties.destination = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.OutputConfig.BigQueryDestination.verify(message.bigqueryDestination);
+                                    var error = $root.google.cloud.retail.v2beta.OutputConfig.BigQueryDestination.verify(message.bigqueryDestination, long + 1);
                                     if (error)
                                         return "bigqueryDestination." + error;
                                 }
@@ -133503,19 +139239,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.OutputConfig} OutputConfig
                          */
-                        OutputConfig.fromObject = function fromObject(object) {
+                        OutputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.OutputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.OutputConfig();
                             if (object.gcsDestination != null) {
                                 if (typeof object.gcsDestination !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.OutputConfig.gcsDestination: object expected");
-                                message.gcsDestination = $root.google.cloud.retail.v2beta.OutputConfig.GcsDestination.fromObject(object.gcsDestination);
+                                message.gcsDestination = $root.google.cloud.retail.v2beta.OutputConfig.GcsDestination.fromObject(object.gcsDestination, long + 1);
                             }
                             if (object.bigqueryDestination != null) {
                                 if (typeof object.bigqueryDestination !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.OutputConfig.bigqueryDestination: object expected");
-                                message.bigqueryDestination = $root.google.cloud.retail.v2beta.OutputConfig.BigQueryDestination.fromObject(object.bigqueryDestination);
+                                message.bigqueryDestination = $root.google.cloud.retail.v2beta.OutputConfig.BigQueryDestination.fromObject(object.bigqueryDestination, long + 1);
                             }
                             return message;
                         };
@@ -133592,7 +139332,7 @@
                             function GcsDestination(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -133657,9 +139397,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            GcsDestination.decode = function decode(reader, length, error) {
+                            GcsDestination.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.OutputConfig.GcsDestination();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -133671,7 +139415,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -133702,9 +139446,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            GcsDestination.verify = function verify(message) {
+                            GcsDestination.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.outputUriPrefix != null && message.hasOwnProperty("outputUriPrefix"))
                                     if (!$util.isString(message.outputUriPrefix))
                                         return "outputUriPrefix: string expected";
@@ -133719,9 +139467,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.OutputConfig.GcsDestination} GcsDestination
                              */
-                            GcsDestination.fromObject = function fromObject(object) {
+                            GcsDestination.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.OutputConfig.GcsDestination)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.OutputConfig.GcsDestination();
                                 if (object.outputUriPrefix != null)
                                     message.outputUriPrefix = String(object.outputUriPrefix);
@@ -133799,7 +139551,7 @@
                             function BigQueryDestination(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -133884,9 +139636,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BigQueryDestination.decode = function decode(reader, length, error) {
+                            BigQueryDestination.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.OutputConfig.BigQueryDestination();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -133906,7 +139662,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -133937,9 +139693,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BigQueryDestination.verify = function verify(message) {
+                            BigQueryDestination.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.datasetId != null && message.hasOwnProperty("datasetId"))
                                     if (!$util.isString(message.datasetId))
                                         return "datasetId: string expected";
@@ -133960,9 +139720,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.OutputConfig.BigQueryDestination} BigQueryDestination
                              */
-                            BigQueryDestination.fromObject = function fromObject(object) {
+                            BigQueryDestination.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.OutputConfig.BigQueryDestination)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.OutputConfig.BigQueryDestination();
                                 if (object.datasetId != null)
                                     message.datasetId = String(object.datasetId);
@@ -134052,7 +139816,7 @@
                         function ExportErrorsConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -134131,9 +139895,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportErrorsConfig.decode = function decode(reader, length, error) {
+                        ExportErrorsConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ExportErrorsConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -134145,7 +139913,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -134176,9 +139944,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportErrorsConfig.verify = function verify(message) {
+                        ExportErrorsConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsPrefix != null && message.hasOwnProperty("gcsPrefix")) {
                                 properties.destination = 1;
@@ -134196,9 +139968,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ExportErrorsConfig} ExportErrorsConfig
                          */
-                        ExportErrorsConfig.fromObject = function fromObject(object) {
+                        ExportErrorsConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ExportErrorsConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ExportErrorsConfig();
                             if (object.gcsPrefix != null)
                                 message.gcsPrefix = String(object.gcsPrefix);
@@ -134277,7 +140053,7 @@
                         function ExportProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -134362,9 +140138,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportProductsRequest.decode = function decode(reader, length, error) {
+                        ExportProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ExportProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -134376,7 +140156,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.decode(reader, reader.uint32());
+                                        message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -134384,7 +140164,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -134415,14 +140195,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportProductsRequest.verify = function verify(message) {
+                        ExportProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.outputConfig != null && message.hasOwnProperty("outputConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.OutputConfig.verify(message.outputConfig);
+                                var error = $root.google.cloud.retail.v2beta.OutputConfig.verify(message.outputConfig, long + 1);
                                 if (error)
                                     return "outputConfig." + error;
                             }
@@ -134440,16 +140224,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ExportProductsRequest} ExportProductsRequest
                          */
-                        ExportProductsRequest.fromObject = function fromObject(object) {
+                        ExportProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ExportProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ExportProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.outputConfig != null) {
                                 if (typeof object.outputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportProductsRequest.outputConfig: object expected");
-                                message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.fromObject(object.outputConfig);
+                                message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.fromObject(object.outputConfig, long + 1);
                             }
                             if (object.filter != null)
                                 message.filter = String(object.filter);
@@ -134534,7 +140322,7 @@
                         function ExportUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -134619,9 +140407,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportUserEventsRequest.decode = function decode(reader, length, error) {
+                        ExportUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ExportUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -134633,7 +140425,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.decode(reader, reader.uint32());
+                                        message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -134641,7 +140433,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -134672,14 +140464,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportUserEventsRequest.verify = function verify(message) {
+                        ExportUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.outputConfig != null && message.hasOwnProperty("outputConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.OutputConfig.verify(message.outputConfig);
+                                var error = $root.google.cloud.retail.v2beta.OutputConfig.verify(message.outputConfig, long + 1);
                                 if (error)
                                     return "outputConfig." + error;
                             }
@@ -134697,16 +140493,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ExportUserEventsRequest} ExportUserEventsRequest
                          */
-                        ExportUserEventsRequest.fromObject = function fromObject(object) {
+                        ExportUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ExportUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ExportUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.outputConfig != null) {
                                 if (typeof object.outputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportUserEventsRequest.outputConfig: object expected");
-                                message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.fromObject(object.outputConfig);
+                                message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.fromObject(object.outputConfig, long + 1);
                             }
                             if (object.filter != null)
                                 message.filter = String(object.filter);
@@ -134791,7 +140591,7 @@
                         function ExportAnalyticsMetricsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -134876,9 +140676,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportAnalyticsMetricsRequest.decode = function decode(reader, length, error) {
+                        ExportAnalyticsMetricsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ExportAnalyticsMetricsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -134890,7 +140694,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.decode(reader, reader.uint32());
+                                        message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -134898,7 +140702,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -134929,14 +140733,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportAnalyticsMetricsRequest.verify = function verify(message) {
+                        ExportAnalyticsMetricsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
                             if (message.outputConfig != null && message.hasOwnProperty("outputConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.OutputConfig.verify(message.outputConfig);
+                                var error = $root.google.cloud.retail.v2beta.OutputConfig.verify(message.outputConfig, long + 1);
                                 if (error)
                                     return "outputConfig." + error;
                             }
@@ -134954,16 +140762,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ExportAnalyticsMetricsRequest} ExportAnalyticsMetricsRequest
                          */
-                        ExportAnalyticsMetricsRequest.fromObject = function fromObject(object) {
+                        ExportAnalyticsMetricsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ExportAnalyticsMetricsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ExportAnalyticsMetricsRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
                             if (object.outputConfig != null) {
                                 if (typeof object.outputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportAnalyticsMetricsRequest.outputConfig: object expected");
-                                message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.fromObject(object.outputConfig);
+                                message.outputConfig = $root.google.cloud.retail.v2beta.OutputConfig.fromObject(object.outputConfig, long + 1);
                             }
                             if (object.filter != null)
                                 message.filter = String(object.filter);
@@ -135047,7 +140859,7 @@
                         function ExportMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -135122,9 +140934,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportMetadata.decode = function decode(reader, length, error) {
+                        ExportMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ExportMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -135132,15 +140948,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -135171,16 +140987,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportMetadata.verify = function verify(message) {
+                        ExportMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -135195,19 +141015,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ExportMetadata} ExportMetadata
                          */
-                        ExportMetadata.fromObject = function fromObject(object) {
+                        ExportMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ExportMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ExportMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportMetadata.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             return message;
                         };
@@ -135288,7 +141112,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -135374,9 +141198,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportProductsResponse.decode = function decode(reader, length, error) {
+                        ExportProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ExportProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -135386,19 +141214,19 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.decode(reader, reader.uint32());
+                                        message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -135429,25 +141257,29 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportProductsResponse.verify = function verify(message) {
+                        ExportProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ExportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2beta.ExportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.outputResult != null && message.hasOwnProperty("outputResult")) {
-                                var error = $root.google.cloud.retail.v2beta.OutputResult.verify(message.outputResult);
+                                var error = $root.google.cloud.retail.v2beta.OutputResult.verify(message.outputResult, long + 1);
                                 if (error)
                                     return "outputResult." + error;
                             }
@@ -135462,9 +141294,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ExportProductsResponse} ExportProductsResponse
                          */
-                        ExportProductsResponse.fromObject = function fromObject(object) {
+                        ExportProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ExportProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ExportProductsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -135473,18 +141309,18 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ExportProductsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportProductsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.outputResult != null) {
                                 if (typeof object.outputResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportProductsResponse.outputResult: object expected");
-                                message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.fromObject(object.outputResult);
+                                message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.fromObject(object.outputResult, long + 1);
                             }
                             return message;
                         };
@@ -135572,7 +141408,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -135658,9 +141494,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportUserEventsResponse.decode = function decode(reader, length, error) {
+                        ExportUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ExportUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -135670,19 +141510,19 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.decode(reader, reader.uint32());
+                                        message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -135713,25 +141553,29 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportUserEventsResponse.verify = function verify(message) {
+                        ExportUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ExportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2beta.ExportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.outputResult != null && message.hasOwnProperty("outputResult")) {
-                                var error = $root.google.cloud.retail.v2beta.OutputResult.verify(message.outputResult);
+                                var error = $root.google.cloud.retail.v2beta.OutputResult.verify(message.outputResult, long + 1);
                                 if (error)
                                     return "outputResult." + error;
                             }
@@ -135746,9 +141590,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ExportUserEventsResponse} ExportUserEventsResponse
                          */
-                        ExportUserEventsResponse.fromObject = function fromObject(object) {
+                        ExportUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ExportUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ExportUserEventsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -135757,18 +141605,18 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ExportUserEventsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportUserEventsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.outputResult != null) {
                                 if (typeof object.outputResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportUserEventsResponse.outputResult: object expected");
-                                message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.fromObject(object.outputResult);
+                                message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.fromObject(object.outputResult, long + 1);
                             }
                             return message;
                         };
@@ -135856,7 +141704,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -135942,9 +141790,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExportAnalyticsMetricsResponse.decode = function decode(reader, length, error) {
+                        ExportAnalyticsMetricsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ExportAnalyticsMetricsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -135954,19 +141806,19 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.decode(reader, reader.uint32());
+                                        message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -135997,25 +141849,29 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExportAnalyticsMetricsResponse.verify = function verify(message) {
+                        ExportAnalyticsMetricsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ExportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2beta.ExportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.outputResult != null && message.hasOwnProperty("outputResult")) {
-                                var error = $root.google.cloud.retail.v2beta.OutputResult.verify(message.outputResult);
+                                var error = $root.google.cloud.retail.v2beta.OutputResult.verify(message.outputResult, long + 1);
                                 if (error)
                                     return "outputResult." + error;
                             }
@@ -136030,9 +141886,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ExportAnalyticsMetricsResponse} ExportAnalyticsMetricsResponse
                          */
-                        ExportAnalyticsMetricsResponse.fromObject = function fromObject(object) {
+                        ExportAnalyticsMetricsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ExportAnalyticsMetricsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ExportAnalyticsMetricsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -136041,18 +141901,18 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ExportAnalyticsMetricsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportAnalyticsMetricsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2beta.ExportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.outputResult != null) {
                                 if (typeof object.outputResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExportAnalyticsMetricsResponse.outputResult: object expected");
-                                message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.fromObject(object.outputResult);
+                                message.outputResult = $root.google.cloud.retail.v2beta.OutputResult.fromObject(object.outputResult, long + 1);
                             }
                             return message;
                         };
@@ -136140,7 +142000,7 @@
                             this.gcsResult = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -136217,9 +142077,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        OutputResult.decode = function decode(reader, length, error) {
+                        OutputResult.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.OutputResult();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -136229,17 +142093,17 @@
                                 case 1: {
                                         if (!(message.bigqueryResult && message.bigqueryResult.length))
                                             message.bigqueryResult = [];
-                                        message.bigqueryResult.push($root.google.cloud.retail.v2beta.BigQueryOutputResult.decode(reader, reader.uint32()));
+                                        message.bigqueryResult.push($root.google.cloud.retail.v2beta.BigQueryOutputResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
                                         if (!(message.gcsResult && message.gcsResult.length))
                                             message.gcsResult = [];
-                                        message.gcsResult.push($root.google.cloud.retail.v2beta.GcsOutputResult.decode(reader, reader.uint32()));
+                                        message.gcsResult.push($root.google.cloud.retail.v2beta.GcsOutputResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -136270,14 +142134,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        OutputResult.verify = function verify(message) {
+                        OutputResult.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.bigqueryResult != null && message.hasOwnProperty("bigqueryResult")) {
                                 if (!Array.isArray(message.bigqueryResult))
                                     return "bigqueryResult: array expected";
                                 for (var i = 0; i < message.bigqueryResult.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.BigQueryOutputResult.verify(message.bigqueryResult[i]);
+                                    var error = $root.google.cloud.retail.v2beta.BigQueryOutputResult.verify(message.bigqueryResult[i], long + 1);
                                     if (error)
                                         return "bigqueryResult." + error;
                                 }
@@ -136286,7 +142154,7 @@
                                 if (!Array.isArray(message.gcsResult))
                                     return "gcsResult: array expected";
                                 for (var i = 0; i < message.gcsResult.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.GcsOutputResult.verify(message.gcsResult[i]);
+                                    var error = $root.google.cloud.retail.v2beta.GcsOutputResult.verify(message.gcsResult[i], long + 1);
                                     if (error)
                                         return "gcsResult." + error;
                                 }
@@ -136302,9 +142170,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.OutputResult} OutputResult
                          */
-                        OutputResult.fromObject = function fromObject(object) {
+                        OutputResult.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.OutputResult)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.OutputResult();
                             if (object.bigqueryResult) {
                                 if (!Array.isArray(object.bigqueryResult))
@@ -136313,7 +142185,7 @@
                                 for (var i = 0; i < object.bigqueryResult.length; ++i) {
                                     if (typeof object.bigqueryResult[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.OutputResult.bigqueryResult: object expected");
-                                    message.bigqueryResult[i] = $root.google.cloud.retail.v2beta.BigQueryOutputResult.fromObject(object.bigqueryResult[i]);
+                                    message.bigqueryResult[i] = $root.google.cloud.retail.v2beta.BigQueryOutputResult.fromObject(object.bigqueryResult[i], long + 1);
                                 }
                             }
                             if (object.gcsResult) {
@@ -136323,7 +142195,7 @@
                                 for (var i = 0; i < object.gcsResult.length; ++i) {
                                     if (typeof object.gcsResult[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.OutputResult.gcsResult: object expected");
-                                    message.gcsResult[i] = $root.google.cloud.retail.v2beta.GcsOutputResult.fromObject(object.gcsResult[i]);
+                                    message.gcsResult[i] = $root.google.cloud.retail.v2beta.GcsOutputResult.fromObject(object.gcsResult[i], long + 1);
                                 }
                             }
                             return message;
@@ -136409,7 +142281,7 @@
                         function BigQueryOutputResult(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -136484,9 +142356,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BigQueryOutputResult.decode = function decode(reader, length, error) {
+                        BigQueryOutputResult.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.BigQueryOutputResult();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -136502,7 +142378,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -136533,9 +142409,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BigQueryOutputResult.verify = function verify(message) {
+                        BigQueryOutputResult.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.datasetId != null && message.hasOwnProperty("datasetId"))
                                 if (!$util.isString(message.datasetId))
                                     return "datasetId: string expected";
@@ -136553,9 +142433,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.BigQueryOutputResult} BigQueryOutputResult
                          */
-                        BigQueryOutputResult.fromObject = function fromObject(object) {
+                        BigQueryOutputResult.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.BigQueryOutputResult)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.BigQueryOutputResult();
                             if (object.datasetId != null)
                                 message.datasetId = String(object.datasetId);
@@ -136637,7 +142521,7 @@
                         function GcsOutputResult(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -136702,9 +142586,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GcsOutputResult.decode = function decode(reader, length, error) {
+                        GcsOutputResult.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GcsOutputResult();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -136716,7 +142604,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -136747,9 +142635,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GcsOutputResult.verify = function verify(message) {
+                        GcsOutputResult.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.outputUri != null && message.hasOwnProperty("outputUri"))
                                 if (!$util.isString(message.outputUri))
                                     return "outputUri: string expected";
@@ -136764,9 +142656,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GcsOutputResult} GcsOutputResult
                          */
-                        GcsOutputResult.fromObject = function fromObject(object) {
+                        GcsOutputResult.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GcsOutputResult)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GcsOutputResult();
                             if (object.outputUri != null)
                                 message.outputUri = String(object.outputUri);
@@ -136843,7 +142739,7 @@
                         function ProductLevelConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -136918,9 +142814,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductLevelConfig.decode = function decode(reader, length, error) {
+                        ProductLevelConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ProductLevelConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -136936,7 +142836,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -136967,9 +142867,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductLevelConfig.verify = function verify(message) {
+                        ProductLevelConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.ingestionProductType != null && message.hasOwnProperty("ingestionProductType"))
                                 if (!$util.isString(message.ingestionProductType))
                                     return "ingestionProductType: string expected";
@@ -136987,9 +142891,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ProductLevelConfig} ProductLevelConfig
                          */
-                        ProductLevelConfig.fromObject = function fromObject(object) {
+                        ProductLevelConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ProductLevelConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ProductLevelConfig();
                             if (object.ingestionProductType != null)
                                 message.ingestionProductType = String(object.ingestionProductType);
@@ -137080,7 +142988,7 @@
                         function CatalogAttribute(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -137235,9 +143143,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CatalogAttribute.decode = function decode(reader, length, error) {
+                        CatalogAttribute.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CatalogAttribute();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -137281,11 +143193,11 @@
                                         break;
                                     }
                                 case 13: {
-                                        message.facetConfig = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.decode(reader, reader.uint32());
+                                        message.facetConfig = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -137316,9 +143228,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CatalogAttribute.verify = function verify(message) {
+                        CatalogAttribute.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.key != null && message.hasOwnProperty("key"))
                                 if (!$util.isString(message.key))
                                     return "key: string expected";
@@ -137389,7 +143305,7 @@
                                     break;
                                 }
                             if (message.facetConfig != null && message.hasOwnProperty("facetConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.verify(message.facetConfig);
+                                var error = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.verify(message.facetConfig, long + 1);
                                 if (error)
                                     return "facetConfig." + error;
                             }
@@ -137404,9 +143320,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CatalogAttribute} CatalogAttribute
                          */
-                        CatalogAttribute.fromObject = function fromObject(object) {
+                        CatalogAttribute.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CatalogAttribute)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CatalogAttribute();
                             if (object.key != null)
                                 message.key = String(object.key);
@@ -137555,7 +143475,7 @@
                             if (object.facetConfig != null) {
                                 if (typeof object.facetConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.CatalogAttribute.facetConfig: object expected");
-                                message.facetConfig = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.fromObject(object.facetConfig);
+                                message.facetConfig = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.fromObject(object.facetConfig, long + 1);
                             }
                             return message;
                         };
@@ -137661,7 +143581,7 @@
                                 this.mergedFacetValues = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -137769,9 +143689,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FacetConfig.decode = function decode(reader, length, error) {
+                            FacetConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -137781,31 +143705,31 @@
                                     case 1: {
                                             if (!(message.facetIntervals && message.facetIntervals.length))
                                                 message.facetIntervals = [];
-                                            message.facetIntervals.push($root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32()));
+                                            message.facetIntervals.push($root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
                                             if (!(message.ignoredFacetValues && message.ignoredFacetValues.length))
                                                 message.ignoredFacetValues = [];
-                                            message.ignoredFacetValues.push($root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues.decode(reader, reader.uint32()));
+                                            message.ignoredFacetValues.push($root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 3: {
                                             if (!(message.mergedFacetValues && message.mergedFacetValues.length))
                                                 message.mergedFacetValues = [];
-                                            message.mergedFacetValues.push($root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacetValue.decode(reader, reader.uint32()));
+                                            message.mergedFacetValues.push($root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacetValue.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 4: {
-                                            message.mergedFacet = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacet.decode(reader, reader.uint32());
+                                            message.mergedFacet = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacet.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 5: {
-                                            message.rerankConfig = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.RerankConfig.decode(reader, reader.uint32());
+                                            message.rerankConfig = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.RerankConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -137836,14 +143760,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FacetConfig.verify = function verify(message) {
+                            FacetConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.facetIntervals != null && message.hasOwnProperty("facetIntervals")) {
                                     if (!Array.isArray(message.facetIntervals))
                                         return "facetIntervals: array expected";
                                     for (var i = 0; i < message.facetIntervals.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.Interval.verify(message.facetIntervals[i]);
+                                        var error = $root.google.cloud.retail.v2beta.Interval.verify(message.facetIntervals[i], long + 1);
                                         if (error)
                                             return "facetIntervals." + error;
                                     }
@@ -137852,7 +143780,7 @@
                                     if (!Array.isArray(message.ignoredFacetValues))
                                         return "ignoredFacetValues: array expected";
                                     for (var i = 0; i < message.ignoredFacetValues.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues.verify(message.ignoredFacetValues[i]);
+                                        var error = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues.verify(message.ignoredFacetValues[i], long + 1);
                                         if (error)
                                             return "ignoredFacetValues." + error;
                                     }
@@ -137861,18 +143789,18 @@
                                     if (!Array.isArray(message.mergedFacetValues))
                                         return "mergedFacetValues: array expected";
                                     for (var i = 0; i < message.mergedFacetValues.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacetValue.verify(message.mergedFacetValues[i]);
+                                        var error = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacetValue.verify(message.mergedFacetValues[i], long + 1);
                                         if (error)
                                             return "mergedFacetValues." + error;
                                     }
                                 }
                                 if (message.mergedFacet != null && message.hasOwnProperty("mergedFacet")) {
-                                    var error = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacet.verify(message.mergedFacet);
+                                    var error = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacet.verify(message.mergedFacet, long + 1);
                                     if (error)
                                         return "mergedFacet." + error;
                                 }
                                 if (message.rerankConfig != null && message.hasOwnProperty("rerankConfig")) {
-                                    var error = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.RerankConfig.verify(message.rerankConfig);
+                                    var error = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.RerankConfig.verify(message.rerankConfig, long + 1);
                                     if (error)
                                         return "rerankConfig." + error;
                                 }
@@ -137887,9 +143815,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.CatalogAttribute.FacetConfig} FacetConfig
                              */
-                            FacetConfig.fromObject = function fromObject(object) {
+                            FacetConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig();
                                 if (object.facetIntervals) {
                                     if (!Array.isArray(object.facetIntervals))
@@ -137898,7 +143830,7 @@
                                     for (var i = 0; i < object.facetIntervals.length; ++i) {
                                         if (typeof object.facetIntervals[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.facetIntervals: object expected");
-                                        message.facetIntervals[i] = $root.google.cloud.retail.v2beta.Interval.fromObject(object.facetIntervals[i]);
+                                        message.facetIntervals[i] = $root.google.cloud.retail.v2beta.Interval.fromObject(object.facetIntervals[i], long + 1);
                                     }
                                 }
                                 if (object.ignoredFacetValues) {
@@ -137908,7 +143840,7 @@
                                     for (var i = 0; i < object.ignoredFacetValues.length; ++i) {
                                         if (typeof object.ignoredFacetValues[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.ignoredFacetValues: object expected");
-                                        message.ignoredFacetValues[i] = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues.fromObject(object.ignoredFacetValues[i]);
+                                        message.ignoredFacetValues[i] = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues.fromObject(object.ignoredFacetValues[i], long + 1);
                                     }
                                 }
                                 if (object.mergedFacetValues) {
@@ -137918,18 +143850,18 @@
                                     for (var i = 0; i < object.mergedFacetValues.length; ++i) {
                                         if (typeof object.mergedFacetValues[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.mergedFacetValues: object expected");
-                                        message.mergedFacetValues[i] = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacetValue.fromObject(object.mergedFacetValues[i]);
+                                        message.mergedFacetValues[i] = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacetValue.fromObject(object.mergedFacetValues[i], long + 1);
                                     }
                                 }
                                 if (object.mergedFacet != null) {
                                     if (typeof object.mergedFacet !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.mergedFacet: object expected");
-                                    message.mergedFacet = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacet.fromObject(object.mergedFacet);
+                                    message.mergedFacet = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacet.fromObject(object.mergedFacet, long + 1);
                                 }
                                 if (object.rerankConfig != null) {
                                     if (typeof object.rerankConfig !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.rerankConfig: object expected");
-                                    message.rerankConfig = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.RerankConfig.fromObject(object.rerankConfig);
+                                    message.rerankConfig = $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.RerankConfig.fromObject(object.rerankConfig, long + 1);
                                 }
                                 return message;
                             };
@@ -138027,7 +143959,7 @@
                                     this.values = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -138113,9 +144045,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                IgnoredFacetValues.decode = function decode(reader, length, error) {
+                                IgnoredFacetValues.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -138129,15 +144065,15 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                                message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         case 3: {
-                                                message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                                message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -138168,9 +144104,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                IgnoredFacetValues.verify = function verify(message) {
+                                IgnoredFacetValues.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.values != null && message.hasOwnProperty("values")) {
                                         if (!Array.isArray(message.values))
                                             return "values: array expected";
@@ -138179,12 +144119,12 @@
                                                 return "values: string[] expected";
                                     }
                                     if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                        var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                        var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                         if (error)
                                             return "startTime." + error;
                                     }
                                     if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                        var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                        var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                         if (error)
                                             return "endTime." + error;
                                     }
@@ -138199,9 +144139,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues} IgnoredFacetValues
                                  */
-                                IgnoredFacetValues.fromObject = function fromObject(object) {
+                                IgnoredFacetValues.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues();
                                     if (object.values) {
                                         if (!Array.isArray(object.values))
@@ -138213,12 +144157,12 @@
                                     if (object.startTime != null) {
                                         if (typeof object.startTime !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues.startTime: object expected");
-                                        message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                        message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                                     }
                                     if (object.endTime != null) {
                                         if (typeof object.endTime !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.IgnoredFacetValues.endTime: object expected");
-                                        message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                        message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                                     }
                                     return message;
                                 };
@@ -138305,7 +144249,7 @@
                                     this.values = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -138381,9 +144325,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                MergedFacetValue.decode = function decode(reader, length, error) {
+                                MergedFacetValue.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacetValue();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -138401,7 +144349,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -138432,9 +144380,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                MergedFacetValue.verify = function verify(message) {
+                                MergedFacetValue.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.values != null && message.hasOwnProperty("values")) {
                                         if (!Array.isArray(message.values))
                                             return "values: array expected";
@@ -138456,9 +144408,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacetValue} MergedFacetValue
                                  */
-                                MergedFacetValue.fromObject = function fromObject(object) {
+                                MergedFacetValue.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacetValue)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacetValue();
                                     if (object.values) {
                                         if (!Array.isArray(object.values))
@@ -138548,7 +144504,7 @@
                                 function MergedFacet(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -138613,9 +144569,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                MergedFacet.decode = function decode(reader, length, error) {
+                                MergedFacet.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacet();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -138627,7 +144587,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -138658,9 +144618,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                MergedFacet.verify = function verify(message) {
+                                MergedFacet.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.mergedFacetKey != null && message.hasOwnProperty("mergedFacetKey"))
                                         if (!$util.isString(message.mergedFacetKey))
                                             return "mergedFacetKey: string expected";
@@ -138675,9 +144639,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacet} MergedFacet
                                  */
-                                MergedFacet.fromObject = function fromObject(object) {
+                                MergedFacet.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacet)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.MergedFacet();
                                     if (object.mergedFacetKey != null)
                                         message.mergedFacetKey = String(object.mergedFacetKey);
@@ -138755,7 +144723,7 @@
                                     this.facetValues = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -138831,9 +144799,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                RerankConfig.decode = function decode(reader, length, error) {
+                                RerankConfig.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.RerankConfig();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -138851,7 +144823,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -138882,9 +144854,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                RerankConfig.verify = function verify(message) {
+                                RerankConfig.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.rerankFacet != null && message.hasOwnProperty("rerankFacet"))
                                         if (typeof message.rerankFacet !== "boolean")
                                             return "rerankFacet: boolean expected";
@@ -138906,9 +144882,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.RerankConfig} RerankConfig
                                  */
-                                RerankConfig.fromObject = function fromObject(object) {
+                                RerankConfig.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.RerankConfig)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.CatalogAttribute.FacetConfig.RerankConfig();
                                     if (object.rerankFacet != null)
                                         message.rerankFacet = Boolean(object.rerankFacet);
@@ -139103,7 +145083,7 @@
                             this.catalogAttributes = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -139191,9 +145171,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AttributesConfig.decode = function decode(reader, length, error) {
+                        AttributesConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AttributesConfig(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -139217,13 +145201,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2beta.CatalogAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2beta.CatalogAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.catalogAttributes, key);
                                         message.catalogAttributes[key] = value;
                                         break;
                                     }
@@ -139232,7 +145218,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -139263,9 +145249,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AttributesConfig.verify = function verify(message) {
+                        AttributesConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -139274,7 +145264,7 @@
                                     return "catalogAttributes: object expected";
                                 var key = Object.keys(message.catalogAttributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.CatalogAttribute.verify(message.catalogAttributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2beta.CatalogAttribute.verify(message.catalogAttributes[key[i]], long + 1);
                                     if (error)
                                         return "catalogAttributes." + error;
                                 }
@@ -139299,9 +145289,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.AttributesConfig} AttributesConfig
                          */
-                        AttributesConfig.fromObject = function fromObject(object) {
+                        AttributesConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.AttributesConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.AttributesConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -139310,9 +145304,11 @@
                                     throw TypeError(".google.cloud.retail.v2beta.AttributesConfig.catalogAttributes: object expected");
                                 message.catalogAttributes = {};
                                 for (var keys = Object.keys(object.catalogAttributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.catalogAttributes, keys[i]);
                                     if (typeof object.catalogAttributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.AttributesConfig.catalogAttributes: object expected");
-                                    message.catalogAttributes[keys[i]] = $root.google.cloud.retail.v2beta.CatalogAttribute.fromObject(object.catalogAttributes[keys[i]]);
+                                    message.catalogAttributes[keys[i]] = $root.google.cloud.retail.v2beta.CatalogAttribute.fromObject(object.catalogAttributes[keys[i]], long + 1);
                                 }
                             }
                             switch (object.attributeConfigLevel) {
@@ -139362,8 +145358,11 @@
                             var keys2;
                             if (message.catalogAttributes && (keys2 = Object.keys(message.catalogAttributes)).length) {
                                 object.catalogAttributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.catalogAttributes, keys2[j]);
                                     object.catalogAttributes[keys2[j]] = $root.google.cloud.retail.v2beta.CatalogAttribute.toObject(message.catalogAttributes[keys2[j]], options);
+                                }
                             }
                             if (message.attributeConfigLevel != null && message.hasOwnProperty("attributeConfigLevel"))
                                 object.attributeConfigLevel = options.enums === String ? $root.google.cloud.retail.v2beta.AttributeConfigLevel[message.attributeConfigLevel] === undefined ? message.attributeConfigLevel : $root.google.cloud.retail.v2beta.AttributeConfigLevel[message.attributeConfigLevel] : message.attributeConfigLevel;
@@ -139429,7 +145428,7 @@
                         function CompletionConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -139594,9 +145593,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompletionConfig.decode = function decode(reader, length, error) {
+                        CompletionConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CompletionConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -139624,7 +145627,7 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.suggestionsInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.suggestionsInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
@@ -139632,7 +145635,7 @@
                                         break;
                                     }
                                 case 7: {
-                                        message.denylistInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.denylistInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
@@ -139640,7 +145643,7 @@
                                         break;
                                     }
                                 case 9: {
-                                        message.allowlistInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.allowlistInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -139648,7 +145651,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -139679,9 +145682,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompletionConfig.verify = function verify(message) {
+                        CompletionConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -139698,7 +145705,7 @@
                                 if (typeof message.autoLearning !== "boolean")
                                     return "autoLearning: boolean expected";
                             if (message.suggestionsInputConfig != null && message.hasOwnProperty("suggestionsInputConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.verify(message.suggestionsInputConfig);
+                                var error = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.verify(message.suggestionsInputConfig, long + 1);
                                 if (error)
                                     return "suggestionsInputConfig." + error;
                             }
@@ -139706,7 +145713,7 @@
                                 if (!$util.isString(message.lastSuggestionsImportOperation))
                                     return "lastSuggestionsImportOperation: string expected";
                             if (message.denylistInputConfig != null && message.hasOwnProperty("denylistInputConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.verify(message.denylistInputConfig);
+                                var error = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.verify(message.denylistInputConfig, long + 1);
                                 if (error)
                                     return "denylistInputConfig." + error;
                             }
@@ -139714,7 +145721,7 @@
                                 if (!$util.isString(message.lastDenylistImportOperation))
                                     return "lastDenylistImportOperation: string expected";
                             if (message.allowlistInputConfig != null && message.hasOwnProperty("allowlistInputConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.verify(message.allowlistInputConfig);
+                                var error = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.verify(message.allowlistInputConfig, long + 1);
                                 if (error)
                                     return "allowlistInputConfig." + error;
                             }
@@ -139732,9 +145739,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CompletionConfig} CompletionConfig
                          */
-                        CompletionConfig.fromObject = function fromObject(object) {
+                        CompletionConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CompletionConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CompletionConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -139749,21 +145760,21 @@
                             if (object.suggestionsInputConfig != null) {
                                 if (typeof object.suggestionsInputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.CompletionConfig.suggestionsInputConfig: object expected");
-                                message.suggestionsInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.fromObject(object.suggestionsInputConfig);
+                                message.suggestionsInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.fromObject(object.suggestionsInputConfig, long + 1);
                             }
                             if (object.lastSuggestionsImportOperation != null)
                                 message.lastSuggestionsImportOperation = String(object.lastSuggestionsImportOperation);
                             if (object.denylistInputConfig != null) {
                                 if (typeof object.denylistInputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.CompletionConfig.denylistInputConfig: object expected");
-                                message.denylistInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.fromObject(object.denylistInputConfig);
+                                message.denylistInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.fromObject(object.denylistInputConfig, long + 1);
                             }
                             if (object.lastDenylistImportOperation != null)
                                 message.lastDenylistImportOperation = String(object.lastDenylistImportOperation);
                             if (object.allowlistInputConfig != null) {
                                 if (typeof object.allowlistInputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.CompletionConfig.allowlistInputConfig: object expected");
-                                message.allowlistInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.fromObject(object.allowlistInputConfig);
+                                message.allowlistInputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.fromObject(object.allowlistInputConfig, long + 1);
                             }
                             if (object.lastAllowlistImportOperation != null)
                                 message.lastAllowlistImportOperation = String(object.lastAllowlistImportOperation);
@@ -139877,7 +145888,7 @@
                             this.feeds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -139994,9 +146005,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MerchantCenterLink.decode = function decode(reader, length, error) {
+                        MerchantCenterLink.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.MerchantCenterLink();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -140028,11 +146043,11 @@
                                 case 6: {
                                         if (!(message.feeds && message.feeds.length))
                                             message.feeds = [];
-                                        message.feeds.push($root.google.cloud.retail.v2beta.MerchantCenterFeedFilter.decode(reader, reader.uint32()));
+                                        message.feeds.push($root.google.cloud.retail.v2beta.MerchantCenterFeedFilter.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -140063,9 +146078,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MerchantCenterLink.verify = function verify(message) {
+                        MerchantCenterLink.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.merchantCenterAccountId != null && message.hasOwnProperty("merchantCenterAccountId"))
                                 if (!$util.isInteger(message.merchantCenterAccountId) && !(message.merchantCenterAccountId && $util.isInteger(message.merchantCenterAccountId.low) && $util.isInteger(message.merchantCenterAccountId.high)))
                                     return "merchantCenterAccountId: integer|Long expected";
@@ -140089,7 +146108,7 @@
                                 if (!Array.isArray(message.feeds))
                                     return "feeds: array expected";
                                 for (var i = 0; i < message.feeds.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.MerchantCenterFeedFilter.verify(message.feeds[i]);
+                                    var error = $root.google.cloud.retail.v2beta.MerchantCenterFeedFilter.verify(message.feeds[i], long + 1);
                                     if (error)
                                         return "feeds." + error;
                                 }
@@ -140105,9 +146124,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.MerchantCenterLink} MerchantCenterLink
                          */
-                        MerchantCenterLink.fromObject = function fromObject(object) {
+                        MerchantCenterLink.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.MerchantCenterLink)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.MerchantCenterLink();
                             if (object.merchantCenterAccountId != null)
                                 if ($util.Long)
@@ -140138,7 +146161,7 @@
                                 for (var i = 0; i < object.feeds.length; ++i) {
                                     if (typeof object.feeds[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.MerchantCenterLink.feeds: object expected");
-                                    message.feeds[i] = $root.google.cloud.retail.v2beta.MerchantCenterFeedFilter.fromObject(object.feeds[i]);
+                                    message.feeds[i] = $root.google.cloud.retail.v2beta.MerchantCenterFeedFilter.fromObject(object.feeds[i], long + 1);
                                 }
                             }
                             return message;
@@ -140245,7 +146268,7 @@
                         function MerchantCenterFeedFilter(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -140320,9 +146343,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MerchantCenterFeedFilter.decode = function decode(reader, length, error) {
+                        MerchantCenterFeedFilter.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.MerchantCenterFeedFilter();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -140338,7 +146365,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -140369,9 +146396,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MerchantCenterFeedFilter.verify = function verify(message) {
+                        MerchantCenterFeedFilter.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.primaryFeedId != null && message.hasOwnProperty("primaryFeedId"))
                                 if (!$util.isInteger(message.primaryFeedId) && !(message.primaryFeedId && $util.isInteger(message.primaryFeedId.low) && $util.isInteger(message.primaryFeedId.high)))
                                     return "primaryFeedId: integer|Long expected";
@@ -140389,9 +146420,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.MerchantCenterFeedFilter} MerchantCenterFeedFilter
                          */
-                        MerchantCenterFeedFilter.fromObject = function fromObject(object) {
+                        MerchantCenterFeedFilter.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.MerchantCenterFeedFilter)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.MerchantCenterFeedFilter();
                             if (object.primaryFeedId != null)
                                 if ($util.Long)
@@ -140488,7 +146523,7 @@
                             this.links = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -140554,9 +146589,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        MerchantCenterLinkingConfig.decode = function decode(reader, length, error) {
+                        MerchantCenterLinkingConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.MerchantCenterLinkingConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -140566,11 +146605,11 @@
                                 case 1: {
                                         if (!(message.links && message.links.length))
                                             message.links = [];
-                                        message.links.push($root.google.cloud.retail.v2beta.MerchantCenterLink.decode(reader, reader.uint32()));
+                                        message.links.push($root.google.cloud.retail.v2beta.MerchantCenterLink.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -140601,14 +146640,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        MerchantCenterLinkingConfig.verify = function verify(message) {
+                        MerchantCenterLinkingConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.links != null && message.hasOwnProperty("links")) {
                                 if (!Array.isArray(message.links))
                                     return "links: array expected";
                                 for (var i = 0; i < message.links.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.MerchantCenterLink.verify(message.links[i]);
+                                    var error = $root.google.cloud.retail.v2beta.MerchantCenterLink.verify(message.links[i], long + 1);
                                     if (error)
                                         return "links." + error;
                                 }
@@ -140624,9 +146667,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.MerchantCenterLinkingConfig} MerchantCenterLinkingConfig
                          */
-                        MerchantCenterLinkingConfig.fromObject = function fromObject(object) {
+                        MerchantCenterLinkingConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.MerchantCenterLinkingConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.MerchantCenterLinkingConfig();
                             if (object.links) {
                                 if (!Array.isArray(object.links))
@@ -140635,7 +146682,7 @@
                                 for (var i = 0; i < object.links.length; ++i) {
                                     if (typeof object.links[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.MerchantCenterLinkingConfig.links: object expected");
-                                    message.links[i] = $root.google.cloud.retail.v2beta.MerchantCenterLink.fromObject(object.links[i]);
+                                    message.links[i] = $root.google.cloud.retail.v2beta.MerchantCenterLink.fromObject(object.links[i], long + 1);
                                 }
                             }
                             return message;
@@ -140716,7 +146763,7 @@
                         function Catalog(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -140811,9 +146858,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Catalog.decode = function decode(reader, length, error) {
+                        Catalog.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Catalog();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -140829,15 +146880,15 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.productLevelConfig = $root.google.cloud.retail.v2beta.ProductLevelConfig.decode(reader, reader.uint32());
+                                        message.productLevelConfig = $root.google.cloud.retail.v2beta.ProductLevelConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.merchantCenterLinkingConfig = $root.google.cloud.retail.v2beta.MerchantCenterLinkingConfig.decode(reader, reader.uint32());
+                                        message.merchantCenterLinkingConfig = $root.google.cloud.retail.v2beta.MerchantCenterLinkingConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -140868,9 +146919,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Catalog.verify = function verify(message) {
+                        Catalog.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -140878,12 +146933,12 @@
                                 if (!$util.isString(message.displayName))
                                     return "displayName: string expected";
                             if (message.productLevelConfig != null && message.hasOwnProperty("productLevelConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ProductLevelConfig.verify(message.productLevelConfig);
+                                var error = $root.google.cloud.retail.v2beta.ProductLevelConfig.verify(message.productLevelConfig, long + 1);
                                 if (error)
                                     return "productLevelConfig." + error;
                             }
                             if (message.merchantCenterLinkingConfig != null && message.hasOwnProperty("merchantCenterLinkingConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.MerchantCenterLinkingConfig.verify(message.merchantCenterLinkingConfig);
+                                var error = $root.google.cloud.retail.v2beta.MerchantCenterLinkingConfig.verify(message.merchantCenterLinkingConfig, long + 1);
                                 if (error)
                                     return "merchantCenterLinkingConfig." + error;
                             }
@@ -140898,9 +146953,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Catalog} Catalog
                          */
-                        Catalog.fromObject = function fromObject(object) {
+                        Catalog.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Catalog)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Catalog();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -140909,12 +146968,12 @@
                             if (object.productLevelConfig != null) {
                                 if (typeof object.productLevelConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Catalog.productLevelConfig: object expected");
-                                message.productLevelConfig = $root.google.cloud.retail.v2beta.ProductLevelConfig.fromObject(object.productLevelConfig);
+                                message.productLevelConfig = $root.google.cloud.retail.v2beta.ProductLevelConfig.fromObject(object.productLevelConfig, long + 1);
                             }
                             if (object.merchantCenterLinkingConfig != null) {
                                 if (typeof object.merchantCenterLinkingConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Catalog.merchantCenterLinkingConfig: object expected");
-                                message.merchantCenterLinkingConfig = $root.google.cloud.retail.v2beta.MerchantCenterLinkingConfig.fromObject(object.merchantCenterLinkingConfig);
+                                message.merchantCenterLinkingConfig = $root.google.cloud.retail.v2beta.MerchantCenterLinkingConfig.fromObject(object.merchantCenterLinkingConfig, long + 1);
                             }
                             return message;
                         };
@@ -141067,7 +147126,7 @@
                             this.pageCategories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -141155,9 +147214,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Condition.decode = function decode(reader, length, error) {
+                        Condition.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Condition();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -141167,13 +147230,13 @@
                                 case 1: {
                                         if (!(message.queryTerms && message.queryTerms.length))
                                             message.queryTerms = [];
-                                        message.queryTerms.push($root.google.cloud.retail.v2beta.Condition.QueryTerm.decode(reader, reader.uint32()));
+                                        message.queryTerms.push($root.google.cloud.retail.v2beta.Condition.QueryTerm.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 3: {
                                         if (!(message.activeTimeRange && message.activeTimeRange.length))
                                             message.activeTimeRange = [];
-                                        message.activeTimeRange.push($root.google.cloud.retail.v2beta.Condition.TimeRange.decode(reader, reader.uint32()));
+                                        message.activeTimeRange.push($root.google.cloud.retail.v2beta.Condition.TimeRange.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 4: {
@@ -141183,7 +147246,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -141214,14 +147277,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Condition.verify = function verify(message) {
+                        Condition.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                 if (!Array.isArray(message.queryTerms))
                                     return "queryTerms: array expected";
                                 for (var i = 0; i < message.queryTerms.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Condition.QueryTerm.verify(message.queryTerms[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Condition.QueryTerm.verify(message.queryTerms[i], long + 1);
                                     if (error)
                                         return "queryTerms." + error;
                                 }
@@ -141230,7 +147297,7 @@
                                 if (!Array.isArray(message.activeTimeRange))
                                     return "activeTimeRange: array expected";
                                 for (var i = 0; i < message.activeTimeRange.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Condition.TimeRange.verify(message.activeTimeRange[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Condition.TimeRange.verify(message.activeTimeRange[i], long + 1);
                                     if (error)
                                         return "activeTimeRange." + error;
                                 }
@@ -141253,9 +147320,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Condition} Condition
                          */
-                        Condition.fromObject = function fromObject(object) {
+                        Condition.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Condition)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Condition();
                             if (object.queryTerms) {
                                 if (!Array.isArray(object.queryTerms))
@@ -141264,7 +147335,7 @@
                                 for (var i = 0; i < object.queryTerms.length; ++i) {
                                     if (typeof object.queryTerms[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Condition.queryTerms: object expected");
-                                    message.queryTerms[i] = $root.google.cloud.retail.v2beta.Condition.QueryTerm.fromObject(object.queryTerms[i]);
+                                    message.queryTerms[i] = $root.google.cloud.retail.v2beta.Condition.QueryTerm.fromObject(object.queryTerms[i], long + 1);
                                 }
                             }
                             if (object.activeTimeRange) {
@@ -141274,7 +147345,7 @@
                                 for (var i = 0; i < object.activeTimeRange.length; ++i) {
                                     if (typeof object.activeTimeRange[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Condition.activeTimeRange: object expected");
-                                    message.activeTimeRange[i] = $root.google.cloud.retail.v2beta.Condition.TimeRange.fromObject(object.activeTimeRange[i]);
+                                    message.activeTimeRange[i] = $root.google.cloud.retail.v2beta.Condition.TimeRange.fromObject(object.activeTimeRange[i], long + 1);
                                 }
                             }
                             if (object.pageCategories) {
@@ -141370,7 +147441,7 @@
                             function QueryTerm(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -141445,9 +147516,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            QueryTerm.decode = function decode(reader, length, error) {
+                            QueryTerm.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Condition.QueryTerm();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -141463,7 +147538,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -141494,9 +147569,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            QueryTerm.verify = function verify(message) {
+                            QueryTerm.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.value != null && message.hasOwnProperty("value"))
                                     if (!$util.isString(message.value))
                                         return "value: string expected";
@@ -141514,9 +147593,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Condition.QueryTerm} QueryTerm
                              */
-                            QueryTerm.fromObject = function fromObject(object) {
+                            QueryTerm.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Condition.QueryTerm)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Condition.QueryTerm();
                                 if (object.value != null)
                                     message.value = String(object.value);
@@ -141599,7 +147682,7 @@
                             function TimeRange(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -141674,9 +147757,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TimeRange.decode = function decode(reader, length, error) {
+                            TimeRange.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Condition.TimeRange();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -141684,15 +147771,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -141723,16 +147810,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TimeRange.verify = function verify(message) {
+                            TimeRange.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                     if (error)
                                         return "startTime." + error;
                                 }
                                 if (message.endTime != null && message.hasOwnProperty("endTime")) {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime, long + 1);
                                     if (error)
                                         return "endTime." + error;
                                 }
@@ -141747,19 +147838,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Condition.TimeRange} TimeRange
                              */
-                            TimeRange.fromObject = function fromObject(object) {
+                            TimeRange.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Condition.TimeRange)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Condition.TimeRange();
                                 if (object.startTime != null) {
                                     if (typeof object.startTime !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Condition.TimeRange.startTime: object expected");
-                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                                 }
                                 if (object.endTime != null) {
                                     if (typeof object.endTime !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Condition.TimeRange.endTime: object expected");
-                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime, long + 1);
                                 }
                                 return message;
                             };
@@ -141851,7 +147946,7 @@
                         function Rule(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -142040,9 +148135,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Rule.decode = function decode(reader, length, error) {
+                        Rule.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -142050,55 +148149,55 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.boostAction = $root.google.cloud.retail.v2beta.Rule.BoostAction.decode(reader, reader.uint32());
+                                        message.boostAction = $root.google.cloud.retail.v2beta.Rule.BoostAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.redirectAction = $root.google.cloud.retail.v2beta.Rule.RedirectAction.decode(reader, reader.uint32());
+                                        message.redirectAction = $root.google.cloud.retail.v2beta.Rule.RedirectAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.onewaySynonymsAction = $root.google.cloud.retail.v2beta.Rule.OnewaySynonymsAction.decode(reader, reader.uint32());
+                                        message.onewaySynonymsAction = $root.google.cloud.retail.v2beta.Rule.OnewaySynonymsAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.doNotAssociateAction = $root.google.cloud.retail.v2beta.Rule.DoNotAssociateAction.decode(reader, reader.uint32());
+                                        message.doNotAssociateAction = $root.google.cloud.retail.v2beta.Rule.DoNotAssociateAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.replacementAction = $root.google.cloud.retail.v2beta.Rule.ReplacementAction.decode(reader, reader.uint32());
+                                        message.replacementAction = $root.google.cloud.retail.v2beta.Rule.ReplacementAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
-                                        message.ignoreAction = $root.google.cloud.retail.v2beta.Rule.IgnoreAction.decode(reader, reader.uint32());
+                                        message.ignoreAction = $root.google.cloud.retail.v2beta.Rule.IgnoreAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
-                                        message.filterAction = $root.google.cloud.retail.v2beta.Rule.FilterAction.decode(reader, reader.uint32());
+                                        message.filterAction = $root.google.cloud.retail.v2beta.Rule.FilterAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 11: {
-                                        message.twowaySynonymsAction = $root.google.cloud.retail.v2beta.Rule.TwowaySynonymsAction.decode(reader, reader.uint32());
+                                        message.twowaySynonymsAction = $root.google.cloud.retail.v2beta.Rule.TwowaySynonymsAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 12: {
-                                        message.forceReturnFacetAction = $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.decode(reader, reader.uint32());
+                                        message.forceReturnFacetAction = $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
-                                        message.removeFacetAction = $root.google.cloud.retail.v2beta.Rule.RemoveFacetAction.decode(reader, reader.uint32());
+                                        message.removeFacetAction = $root.google.cloud.retail.v2beta.Rule.RemoveFacetAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
-                                        message.pinAction = $root.google.cloud.retail.v2beta.Rule.PinAction.decode(reader, reader.uint32());
+                                        message.pinAction = $root.google.cloud.retail.v2beta.Rule.PinAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
-                                        message.condition = $root.google.cloud.retail.v2beta.Condition.decode(reader, reader.uint32());
+                                        message.condition = $root.google.cloud.retail.v2beta.Condition.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -142129,14 +148228,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Rule.verify = function verify(message) {
+                        Rule.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.boostAction != null && message.hasOwnProperty("boostAction")) {
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.BoostAction.verify(message.boostAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.BoostAction.verify(message.boostAction, long + 1);
                                     if (error)
                                         return "boostAction." + error;
                                 }
@@ -142146,7 +148249,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.RedirectAction.verify(message.redirectAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.RedirectAction.verify(message.redirectAction, long + 1);
                                     if (error)
                                         return "redirectAction." + error;
                                 }
@@ -142156,7 +148259,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.OnewaySynonymsAction.verify(message.onewaySynonymsAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.OnewaySynonymsAction.verify(message.onewaySynonymsAction, long + 1);
                                     if (error)
                                         return "onewaySynonymsAction." + error;
                                 }
@@ -142166,7 +148269,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.DoNotAssociateAction.verify(message.doNotAssociateAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.DoNotAssociateAction.verify(message.doNotAssociateAction, long + 1);
                                     if (error)
                                         return "doNotAssociateAction." + error;
                                 }
@@ -142176,7 +148279,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.ReplacementAction.verify(message.replacementAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.ReplacementAction.verify(message.replacementAction, long + 1);
                                     if (error)
                                         return "replacementAction." + error;
                                 }
@@ -142186,7 +148289,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.IgnoreAction.verify(message.ignoreAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.IgnoreAction.verify(message.ignoreAction, long + 1);
                                     if (error)
                                         return "ignoreAction." + error;
                                 }
@@ -142196,7 +148299,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.FilterAction.verify(message.filterAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.FilterAction.verify(message.filterAction, long + 1);
                                     if (error)
                                         return "filterAction." + error;
                                 }
@@ -142206,7 +148309,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.TwowaySynonymsAction.verify(message.twowaySynonymsAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.TwowaySynonymsAction.verify(message.twowaySynonymsAction, long + 1);
                                     if (error)
                                         return "twowaySynonymsAction." + error;
                                 }
@@ -142216,7 +148319,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.verify(message.forceReturnFacetAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.verify(message.forceReturnFacetAction, long + 1);
                                     if (error)
                                         return "forceReturnFacetAction." + error;
                                 }
@@ -142226,7 +148329,7 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.RemoveFacetAction.verify(message.removeFacetAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.RemoveFacetAction.verify(message.removeFacetAction, long + 1);
                                     if (error)
                                         return "removeFacetAction." + error;
                                 }
@@ -142236,13 +148339,13 @@
                                     return "action: multiple values";
                                 properties.action = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.PinAction.verify(message.pinAction);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.PinAction.verify(message.pinAction, long + 1);
                                     if (error)
                                         return "pinAction." + error;
                                 }
                             }
                             if (message.condition != null && message.hasOwnProperty("condition")) {
-                                var error = $root.google.cloud.retail.v2beta.Condition.verify(message.condition);
+                                var error = $root.google.cloud.retail.v2beta.Condition.verify(message.condition, long + 1);
                                 if (error)
                                     return "condition." + error;
                             }
@@ -142257,69 +148360,73 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Rule} Rule
                          */
-                        Rule.fromObject = function fromObject(object) {
+                        Rule.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Rule)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Rule();
                             if (object.boostAction != null) {
                                 if (typeof object.boostAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.boostAction: object expected");
-                                message.boostAction = $root.google.cloud.retail.v2beta.Rule.BoostAction.fromObject(object.boostAction);
+                                message.boostAction = $root.google.cloud.retail.v2beta.Rule.BoostAction.fromObject(object.boostAction, long + 1);
                             }
                             if (object.redirectAction != null) {
                                 if (typeof object.redirectAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.redirectAction: object expected");
-                                message.redirectAction = $root.google.cloud.retail.v2beta.Rule.RedirectAction.fromObject(object.redirectAction);
+                                message.redirectAction = $root.google.cloud.retail.v2beta.Rule.RedirectAction.fromObject(object.redirectAction, long + 1);
                             }
                             if (object.onewaySynonymsAction != null) {
                                 if (typeof object.onewaySynonymsAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.onewaySynonymsAction: object expected");
-                                message.onewaySynonymsAction = $root.google.cloud.retail.v2beta.Rule.OnewaySynonymsAction.fromObject(object.onewaySynonymsAction);
+                                message.onewaySynonymsAction = $root.google.cloud.retail.v2beta.Rule.OnewaySynonymsAction.fromObject(object.onewaySynonymsAction, long + 1);
                             }
                             if (object.doNotAssociateAction != null) {
                                 if (typeof object.doNotAssociateAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.doNotAssociateAction: object expected");
-                                message.doNotAssociateAction = $root.google.cloud.retail.v2beta.Rule.DoNotAssociateAction.fromObject(object.doNotAssociateAction);
+                                message.doNotAssociateAction = $root.google.cloud.retail.v2beta.Rule.DoNotAssociateAction.fromObject(object.doNotAssociateAction, long + 1);
                             }
                             if (object.replacementAction != null) {
                                 if (typeof object.replacementAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.replacementAction: object expected");
-                                message.replacementAction = $root.google.cloud.retail.v2beta.Rule.ReplacementAction.fromObject(object.replacementAction);
+                                message.replacementAction = $root.google.cloud.retail.v2beta.Rule.ReplacementAction.fromObject(object.replacementAction, long + 1);
                             }
                             if (object.ignoreAction != null) {
                                 if (typeof object.ignoreAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.ignoreAction: object expected");
-                                message.ignoreAction = $root.google.cloud.retail.v2beta.Rule.IgnoreAction.fromObject(object.ignoreAction);
+                                message.ignoreAction = $root.google.cloud.retail.v2beta.Rule.IgnoreAction.fromObject(object.ignoreAction, long + 1);
                             }
                             if (object.filterAction != null) {
                                 if (typeof object.filterAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.filterAction: object expected");
-                                message.filterAction = $root.google.cloud.retail.v2beta.Rule.FilterAction.fromObject(object.filterAction);
+                                message.filterAction = $root.google.cloud.retail.v2beta.Rule.FilterAction.fromObject(object.filterAction, long + 1);
                             }
                             if (object.twowaySynonymsAction != null) {
                                 if (typeof object.twowaySynonymsAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.twowaySynonymsAction: object expected");
-                                message.twowaySynonymsAction = $root.google.cloud.retail.v2beta.Rule.TwowaySynonymsAction.fromObject(object.twowaySynonymsAction);
+                                message.twowaySynonymsAction = $root.google.cloud.retail.v2beta.Rule.TwowaySynonymsAction.fromObject(object.twowaySynonymsAction, long + 1);
                             }
                             if (object.forceReturnFacetAction != null) {
                                 if (typeof object.forceReturnFacetAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.forceReturnFacetAction: object expected");
-                                message.forceReturnFacetAction = $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.fromObject(object.forceReturnFacetAction);
+                                message.forceReturnFacetAction = $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.fromObject(object.forceReturnFacetAction, long + 1);
                             }
                             if (object.removeFacetAction != null) {
                                 if (typeof object.removeFacetAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.removeFacetAction: object expected");
-                                message.removeFacetAction = $root.google.cloud.retail.v2beta.Rule.RemoveFacetAction.fromObject(object.removeFacetAction);
+                                message.removeFacetAction = $root.google.cloud.retail.v2beta.Rule.RemoveFacetAction.fromObject(object.removeFacetAction, long + 1);
                             }
                             if (object.pinAction != null) {
                                 if (typeof object.pinAction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.pinAction: object expected");
-                                message.pinAction = $root.google.cloud.retail.v2beta.Rule.PinAction.fromObject(object.pinAction);
+                                message.pinAction = $root.google.cloud.retail.v2beta.Rule.PinAction.fromObject(object.pinAction, long + 1);
                             }
                             if (object.condition != null) {
                                 if (typeof object.condition !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Rule.condition: object expected");
-                                message.condition = $root.google.cloud.retail.v2beta.Condition.fromObject(object.condition);
+                                message.condition = $root.google.cloud.retail.v2beta.Condition.fromObject(object.condition, long + 1);
                             }
                             return message;
                         };
@@ -142446,7 +148553,7 @@
                             function BoostAction(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -142521,9 +148628,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BoostAction.decode = function decode(reader, length, error) {
+                            BoostAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.BoostAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -142539,7 +148650,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -142570,9 +148681,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BoostAction.verify = function verify(message) {
+                            BoostAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.boost != null && message.hasOwnProperty("boost"))
                                     if (typeof message.boost !== "number")
                                         return "boost: number expected";
@@ -142590,9 +148705,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.BoostAction} BoostAction
                              */
-                            BoostAction.fromObject = function fromObject(object) {
+                            BoostAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.BoostAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.BoostAction();
                                 if (object.boost != null)
                                     message.boost = Number(object.boost);
@@ -142674,7 +148793,7 @@
                             function FilterAction(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -142739,9 +148858,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FilterAction.decode = function decode(reader, length, error) {
+                            FilterAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.FilterAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -142753,7 +148876,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -142784,9 +148907,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FilterAction.verify = function verify(message) {
+                            FilterAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.filter != null && message.hasOwnProperty("filter"))
                                     if (!$util.isString(message.filter))
                                         return "filter: string expected";
@@ -142801,9 +148928,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.FilterAction} FilterAction
                              */
-                            FilterAction.fromObject = function fromObject(object) {
+                            FilterAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.FilterAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.FilterAction();
                                 if (object.filter != null)
                                     message.filter = String(object.filter);
@@ -142879,7 +149010,7 @@
                             function RedirectAction(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -142944,9 +149075,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RedirectAction.decode = function decode(reader, length, error) {
+                            RedirectAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.RedirectAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -142958,7 +149093,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -142989,9 +149124,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RedirectAction.verify = function verify(message) {
+                            RedirectAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.redirectUri != null && message.hasOwnProperty("redirectUri"))
                                     if (!$util.isString(message.redirectUri))
                                         return "redirectUri: string expected";
@@ -143006,9 +149145,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.RedirectAction} RedirectAction
                              */
-                            RedirectAction.fromObject = function fromObject(object) {
+                            RedirectAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.RedirectAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.RedirectAction();
                                 if (object.redirectUri != null)
                                     message.redirectUri = String(object.redirectUri);
@@ -143085,7 +149228,7 @@
                                 this.synonyms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -143151,9 +149294,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TwowaySynonymsAction.decode = function decode(reader, length, error) {
+                            TwowaySynonymsAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.TwowaySynonymsAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -143167,7 +149314,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -143198,9 +149345,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TwowaySynonymsAction.verify = function verify(message) {
+                            TwowaySynonymsAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.synonyms != null && message.hasOwnProperty("synonyms")) {
                                     if (!Array.isArray(message.synonyms))
                                         return "synonyms: array expected";
@@ -143219,9 +149370,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.TwowaySynonymsAction} TwowaySynonymsAction
                              */
-                            TwowaySynonymsAction.fromObject = function fromObject(object) {
+                            TwowaySynonymsAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.TwowaySynonymsAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.TwowaySynonymsAction();
                                 if (object.synonyms) {
                                     if (!Array.isArray(object.synonyms))
@@ -143310,7 +149465,7 @@
                                 this.onewayTerms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -143398,9 +149553,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            OnewaySynonymsAction.decode = function decode(reader, length, error) {
+                            OnewaySynonymsAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.OnewaySynonymsAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -143426,7 +149585,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -143457,9 +149616,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            OnewaySynonymsAction.verify = function verify(message) {
+                            OnewaySynonymsAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                     if (!Array.isArray(message.queryTerms))
                                         return "queryTerms: array expected";
@@ -143492,9 +149655,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.OnewaySynonymsAction} OnewaySynonymsAction
                              */
-                            OnewaySynonymsAction.fromObject = function fromObject(object) {
+                            OnewaySynonymsAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.OnewaySynonymsAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.OnewaySynonymsAction();
                                 if (object.queryTerms) {
                                     if (!Array.isArray(object.queryTerms))
@@ -143610,7 +149777,7 @@
                                 this.terms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -143698,9 +149865,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DoNotAssociateAction.decode = function decode(reader, length, error) {
+                            DoNotAssociateAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.DoNotAssociateAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -143726,7 +149897,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -143757,9 +149928,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DoNotAssociateAction.verify = function verify(message) {
+                            DoNotAssociateAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                     if (!Array.isArray(message.queryTerms))
                                         return "queryTerms: array expected";
@@ -143792,9 +149967,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.DoNotAssociateAction} DoNotAssociateAction
                              */
-                            DoNotAssociateAction.fromObject = function fromObject(object) {
+                            DoNotAssociateAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.DoNotAssociateAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.DoNotAssociateAction();
                                 if (object.queryTerms) {
                                     if (!Array.isArray(object.queryTerms))
@@ -143908,7 +150087,7 @@
                                 this.queryTerms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -143994,9 +150173,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ReplacementAction.decode = function decode(reader, length, error) {
+                            ReplacementAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.ReplacementAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -144018,7 +150201,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -144049,9 +150232,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ReplacementAction.verify = function verify(message) {
+                            ReplacementAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.queryTerms != null && message.hasOwnProperty("queryTerms")) {
                                     if (!Array.isArray(message.queryTerms))
                                         return "queryTerms: array expected";
@@ -144076,9 +150263,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.ReplacementAction} ReplacementAction
                              */
-                            ReplacementAction.fromObject = function fromObject(object) {
+                            ReplacementAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.ReplacementAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.ReplacementAction();
                                 if (object.queryTerms) {
                                     if (!Array.isArray(object.queryTerms))
@@ -144175,7 +150366,7 @@
                                 this.ignoreTerms = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -144241,9 +150432,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            IgnoreAction.decode = function decode(reader, length, error) {
+                            IgnoreAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.IgnoreAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -144257,7 +150452,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -144288,9 +150483,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            IgnoreAction.verify = function verify(message) {
+                            IgnoreAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.ignoreTerms != null && message.hasOwnProperty("ignoreTerms")) {
                                     if (!Array.isArray(message.ignoreTerms))
                                         return "ignoreTerms: array expected";
@@ -144309,9 +150508,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.IgnoreAction} IgnoreAction
                              */
-                            IgnoreAction.fromObject = function fromObject(object) {
+                            IgnoreAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.IgnoreAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.IgnoreAction();
                                 if (object.ignoreTerms) {
                                     if (!Array.isArray(object.ignoreTerms))
@@ -144396,7 +150599,7 @@
                                 this.facetPositionAdjustments = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -144462,9 +150665,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ForceReturnFacetAction.decode = function decode(reader, length, error) {
+                            ForceReturnFacetAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -144474,11 +150681,11 @@
                                     case 1: {
                                             if (!(message.facetPositionAdjustments && message.facetPositionAdjustments.length))
                                                 message.facetPositionAdjustments = [];
-                                            message.facetPositionAdjustments.push($root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.FacetPositionAdjustment.decode(reader, reader.uint32()));
+                                            message.facetPositionAdjustments.push($root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.FacetPositionAdjustment.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -144509,14 +150716,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ForceReturnFacetAction.verify = function verify(message) {
+                            ForceReturnFacetAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.facetPositionAdjustments != null && message.hasOwnProperty("facetPositionAdjustments")) {
                                     if (!Array.isArray(message.facetPositionAdjustments))
                                         return "facetPositionAdjustments: array expected";
                                     for (var i = 0; i < message.facetPositionAdjustments.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.FacetPositionAdjustment.verify(message.facetPositionAdjustments[i]);
+                                        var error = $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.FacetPositionAdjustment.verify(message.facetPositionAdjustments[i], long + 1);
                                         if (error)
                                             return "facetPositionAdjustments." + error;
                                     }
@@ -144532,9 +150743,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.ForceReturnFacetAction} ForceReturnFacetAction
                              */
-                            ForceReturnFacetAction.fromObject = function fromObject(object) {
+                            ForceReturnFacetAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction();
                                 if (object.facetPositionAdjustments) {
                                     if (!Array.isArray(object.facetPositionAdjustments))
@@ -144543,7 +150758,7 @@
                                     for (var i = 0; i < object.facetPositionAdjustments.length; ++i) {
                                         if (typeof object.facetPositionAdjustments[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.facetPositionAdjustments: object expected");
-                                        message.facetPositionAdjustments[i] = $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.FacetPositionAdjustment.fromObject(object.facetPositionAdjustments[i]);
+                                        message.facetPositionAdjustments[i] = $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.FacetPositionAdjustment.fromObject(object.facetPositionAdjustments[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -144619,7 +150834,7 @@
                                 function FacetPositionAdjustment(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -144694,9 +150909,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FacetPositionAdjustment.decode = function decode(reader, length, error) {
+                                FacetPositionAdjustment.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.FacetPositionAdjustment();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -144712,7 +150931,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -144743,9 +150962,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FacetPositionAdjustment.verify = function verify(message) {
+                                FacetPositionAdjustment.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.attributeName != null && message.hasOwnProperty("attributeName"))
                                         if (!$util.isString(message.attributeName))
                                             return "attributeName: string expected";
@@ -144763,9 +150986,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.FacetPositionAdjustment} FacetPositionAdjustment
                                  */
-                                FacetPositionAdjustment.fromObject = function fromObject(object) {
+                                FacetPositionAdjustment.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.FacetPositionAdjustment)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.Rule.ForceReturnFacetAction.FacetPositionAdjustment();
                                     if (object.attributeName != null)
                                         message.attributeName = String(object.attributeName);
@@ -144851,7 +151078,7 @@
                                 this.attributeNames = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -144917,9 +151144,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RemoveFacetAction.decode = function decode(reader, length, error) {
+                            RemoveFacetAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.RemoveFacetAction();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -144933,7 +151164,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -144964,9 +151195,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RemoveFacetAction.verify = function verify(message) {
+                            RemoveFacetAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.attributeNames != null && message.hasOwnProperty("attributeNames")) {
                                     if (!Array.isArray(message.attributeNames))
                                         return "attributeNames: array expected";
@@ -144985,9 +151220,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.RemoveFacetAction} RemoveFacetAction
                              */
-                            RemoveFacetAction.fromObject = function fromObject(object) {
+                            RemoveFacetAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.RemoveFacetAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.RemoveFacetAction();
                                 if (object.attributeNames) {
                                     if (!Array.isArray(object.attributeNames))
@@ -145072,7 +151311,7 @@
                                 this.pinMap = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -145138,9 +151377,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PinAction.decode = function decode(reader, length, error) {
+                            PinAction.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rule.PinAction(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -145163,7 +151406,7 @@
                                                     value = reader.string();
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
@@ -145171,7 +151414,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -145202,9 +151445,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PinAction.verify = function verify(message) {
+                            PinAction.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.pinMap != null && message.hasOwnProperty("pinMap")) {
                                     if (!$util.isObject(message.pinMap))
                                         return "pinMap: object expected";
@@ -145227,16 +151474,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Rule.PinAction} PinAction
                              */
-                            PinAction.fromObject = function fromObject(object) {
+                            PinAction.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Rule.PinAction)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Rule.PinAction();
                                 if (object.pinMap) {
                                     if (typeof object.pinMap !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Rule.PinAction.pinMap: object expected");
                                     message.pinMap = {};
-                                    for (var keys = Object.keys(object.pinMap), i = 0; i < keys.length; ++i)
+                                    for (var keys = Object.keys(object.pinMap), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.pinMap, keys[i]);
                                         message.pinMap[keys[i]] = String(object.pinMap[keys[i]]);
+                                    }
                                 }
                                 return message;
                             };
@@ -145259,8 +151513,11 @@
                                 var keys2;
                                 if (message.pinMap && (keys2 = Object.keys(message.pinMap)).length) {
                                     object.pinMap = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.pinMap, keys2[j]);
                                         object.pinMap[keys2[j]] = message.pinMap[keys2[j]];
+                                    }
                                 }
                                 return object;
                             };
@@ -145320,7 +151577,7 @@
                             this.ageGroups = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -145397,9 +151654,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Audience.decode = function decode(reader, length, error) {
+                        Audience.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Audience();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -145419,7 +151680,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -145450,9 +151711,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Audience.verify = function verify(message) {
+                        Audience.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.genders != null && message.hasOwnProperty("genders")) {
                                 if (!Array.isArray(message.genders))
                                     return "genders: array expected";
@@ -145478,9 +151743,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Audience} Audience
                          */
-                        Audience.fromObject = function fromObject(object) {
+                        Audience.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Audience)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Audience();
                             if (object.genders) {
                                 if (!Array.isArray(object.genders))
@@ -145581,7 +151850,7 @@
                             this.colors = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -145658,9 +151927,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ColorInfo.decode = function decode(reader, length, error) {
+                        ColorInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ColorInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -145680,7 +151953,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -145711,9 +151984,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ColorInfo.verify = function verify(message) {
+                        ColorInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.colorFamilies != null && message.hasOwnProperty("colorFamilies")) {
                                 if (!Array.isArray(message.colorFamilies))
                                     return "colorFamilies: array expected";
@@ -145739,9 +152016,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ColorInfo} ColorInfo
                          */
-                        ColorInfo.fromObject = function fromObject(object) {
+                        ColorInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ColorInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ColorInfo();
                             if (object.colorFamilies) {
                                 if (!Array.isArray(object.colorFamilies))
@@ -145844,7 +152125,7 @@
                             this.numbers = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -145959,9 +152240,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CustomAttribute.decode = function decode(reader, length, error) {
+                        CustomAttribute.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CustomAttribute();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -145994,7 +152279,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -146025,9 +152310,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CustomAttribute.verify = function verify(message) {
+                        CustomAttribute.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.text != null && message.hasOwnProperty("text")) {
                                 if (!Array.isArray(message.text))
@@ -146064,9 +152353,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CustomAttribute} CustomAttribute
                          */
-                        CustomAttribute.fromObject = function fromObject(object) {
+                        CustomAttribute.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CustomAttribute)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CustomAttribute();
                             if (object.text) {
                                 if (!Array.isArray(object.text))
@@ -146180,7 +152473,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -146256,9 +152549,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        FulfillmentInfo.decode = function decode(reader, length, error) {
+                        FulfillmentInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.FulfillmentInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -146276,7 +152573,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -146307,9 +152604,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        FulfillmentInfo.verify = function verify(message) {
+                        FulfillmentInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.type != null && message.hasOwnProperty("type"))
                                 if (!$util.isString(message.type))
                                     return "type: string expected";
@@ -146331,9 +152632,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.FulfillmentInfo} FulfillmentInfo
                          */
-                        FulfillmentInfo.fromObject = function fromObject(object) {
+                        FulfillmentInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.FulfillmentInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.FulfillmentInfo();
                             if (object.type != null)
                                 message.type = String(object.type);
@@ -146425,7 +152730,7 @@
                         function Image(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -146510,9 +152815,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Image.decode = function decode(reader, length, error) {
+                        Image.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Image();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -146532,7 +152841,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -146563,9 +152872,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Image.verify = function verify(message) {
+                        Image.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.uri != null && message.hasOwnProperty("uri"))
                                 if (!$util.isString(message.uri))
                                     return "uri: string expected";
@@ -146586,9 +152899,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Image} Image
                          */
-                        Image.fromObject = function fromObject(object) {
+                        Image.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Image)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Image();
                             if (object.uri != null)
                                 message.uri = String(object.uri);
@@ -146678,7 +152995,7 @@
                         function Interval(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -146798,9 +153115,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Interval.decode = function decode(reader, length, error) {
+                        Interval.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Interval();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -146824,7 +153145,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -146855,9 +153176,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Interval.verify = function verify(message) {
+                        Interval.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.minimum != null && message.hasOwnProperty("minimum")) {
                                 properties.min = 1;
@@ -146894,9 +153219,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Interval} Interval
                          */
-                        Interval.fromObject = function fromObject(object) {
+                        Interval.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Interval)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Interval();
                             if (object.minimum != null)
                                 message.minimum = Number(object.minimum);
@@ -147000,7 +153329,7 @@
                         function PriceInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -147125,9 +153454,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PriceInfo.decode = function decode(reader, length, error) {
+                        PriceInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PriceInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -147151,19 +153484,19 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.priceEffectiveTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.priceEffectiveTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.priceExpireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.priceExpireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.priceRange = $root.google.cloud.retail.v2beta.PriceInfo.PriceRange.decode(reader, reader.uint32());
+                                        message.priceRange = $root.google.cloud.retail.v2beta.PriceInfo.PriceRange.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -147194,9 +153527,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PriceInfo.verify = function verify(message) {
+                        PriceInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.currencyCode != null && message.hasOwnProperty("currencyCode"))
                                 if (!$util.isString(message.currencyCode))
                                     return "currencyCode: string expected";
@@ -147210,17 +153547,17 @@
                                 if (typeof message.cost !== "number")
                                     return "cost: number expected";
                             if (message.priceEffectiveTime != null && message.hasOwnProperty("priceEffectiveTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.priceEffectiveTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.priceEffectiveTime, long + 1);
                                 if (error)
                                     return "priceEffectiveTime." + error;
                             }
                             if (message.priceExpireTime != null && message.hasOwnProperty("priceExpireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.priceExpireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.priceExpireTime, long + 1);
                                 if (error)
                                     return "priceExpireTime." + error;
                             }
                             if (message.priceRange != null && message.hasOwnProperty("priceRange")) {
-                                var error = $root.google.cloud.retail.v2beta.PriceInfo.PriceRange.verify(message.priceRange);
+                                var error = $root.google.cloud.retail.v2beta.PriceInfo.PriceRange.verify(message.priceRange, long + 1);
                                 if (error)
                                     return "priceRange." + error;
                             }
@@ -147235,9 +153572,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PriceInfo} PriceInfo
                          */
-                        PriceInfo.fromObject = function fromObject(object) {
+                        PriceInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PriceInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PriceInfo();
                             if (object.currencyCode != null)
                                 message.currencyCode = String(object.currencyCode);
@@ -147250,17 +153591,17 @@
                             if (object.priceEffectiveTime != null) {
                                 if (typeof object.priceEffectiveTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.PriceInfo.priceEffectiveTime: object expected");
-                                message.priceEffectiveTime = $root.google.protobuf.Timestamp.fromObject(object.priceEffectiveTime);
+                                message.priceEffectiveTime = $root.google.protobuf.Timestamp.fromObject(object.priceEffectiveTime, long + 1);
                             }
                             if (object.priceExpireTime != null) {
                                 if (typeof object.priceExpireTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.PriceInfo.priceExpireTime: object expected");
-                                message.priceExpireTime = $root.google.protobuf.Timestamp.fromObject(object.priceExpireTime);
+                                message.priceExpireTime = $root.google.protobuf.Timestamp.fromObject(object.priceExpireTime, long + 1);
                             }
                             if (object.priceRange != null) {
                                 if (typeof object.priceRange !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.PriceInfo.priceRange: object expected");
-                                message.priceRange = $root.google.cloud.retail.v2beta.PriceInfo.PriceRange.fromObject(object.priceRange);
+                                message.priceRange = $root.google.cloud.retail.v2beta.PriceInfo.PriceRange.fromObject(object.priceRange, long + 1);
                             }
                             return message;
                         };
@@ -147351,7 +153692,7 @@
                             function PriceRange(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -147426,9 +153767,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PriceRange.decode = function decode(reader, length, error) {
+                            PriceRange.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PriceInfo.PriceRange();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -147436,15 +153781,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.price = $root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32());
+                                            message.price = $root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.originalPrice = $root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32());
+                                            message.originalPrice = $root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -147475,16 +153820,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PriceRange.verify = function verify(message) {
+                            PriceRange.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.price != null && message.hasOwnProperty("price")) {
-                                    var error = $root.google.cloud.retail.v2beta.Interval.verify(message.price);
+                                    var error = $root.google.cloud.retail.v2beta.Interval.verify(message.price, long + 1);
                                     if (error)
                                         return "price." + error;
                                 }
                                 if (message.originalPrice != null && message.hasOwnProperty("originalPrice")) {
-                                    var error = $root.google.cloud.retail.v2beta.Interval.verify(message.originalPrice);
+                                    var error = $root.google.cloud.retail.v2beta.Interval.verify(message.originalPrice, long + 1);
                                     if (error)
                                         return "originalPrice." + error;
                                 }
@@ -147499,19 +153848,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.PriceInfo.PriceRange} PriceRange
                              */
-                            PriceRange.fromObject = function fromObject(object) {
+                            PriceRange.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.PriceInfo.PriceRange)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.PriceInfo.PriceRange();
                                 if (object.price != null) {
                                     if (typeof object.price !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.PriceInfo.PriceRange.price: object expected");
-                                    message.price = $root.google.cloud.retail.v2beta.Interval.fromObject(object.price);
+                                    message.price = $root.google.cloud.retail.v2beta.Interval.fromObject(object.price, long + 1);
                                 }
                                 if (object.originalPrice != null) {
                                     if (typeof object.originalPrice !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.PriceInfo.PriceRange.originalPrice: object expected");
-                                    message.originalPrice = $root.google.cloud.retail.v2beta.Interval.fromObject(object.originalPrice);
+                                    message.originalPrice = $root.google.cloud.retail.v2beta.Interval.fromObject(object.originalPrice, long + 1);
                                 }
                                 return message;
                             };
@@ -147595,7 +153948,7 @@
                             this.ratingHistogram = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -147684,9 +154037,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Rating.decode = function decode(reader, length, error) {
+                        Rating.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Rating();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -147713,7 +154070,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -147744,9 +154101,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Rating.verify = function verify(message) {
+                        Rating.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.ratingCount != null && message.hasOwnProperty("ratingCount"))
                                 if (!$util.isInteger(message.ratingCount))
                                     return "ratingCount: integer expected";
@@ -147771,9 +154132,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Rating} Rating
                          */
-                        Rating.fromObject = function fromObject(object) {
+                        Rating.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Rating)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Rating();
                             if (object.ratingCount != null)
                                 message.ratingCount = object.ratingCount | 0;
@@ -147872,7 +154237,7 @@
                         function UserInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -147967,9 +154332,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserInfo.decode = function decode(reader, length, error) {
+                        UserInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UserInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -147993,7 +154362,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -148024,9 +154393,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserInfo.verify = function verify(message) {
+                        UserInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.userId != null && message.hasOwnProperty("userId"))
                                 if (!$util.isString(message.userId))
                                     return "userId: string expected";
@@ -148050,9 +154423,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UserInfo} UserInfo
                          */
-                        UserInfo.fromObject = function fromObject(object) {
+                        UserInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UserInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UserInfo();
                             if (object.userId != null)
                                 message.userId = String(object.userId);
@@ -148149,7 +154526,7 @@
                             this.fulfillmentTypes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -148248,9 +154625,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        LocalInventory.decode = function decode(reader, length, error) {
+                        LocalInventory.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.LocalInventory(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -148262,7 +154643,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.priceInfo = $root.google.cloud.retail.v2beta.PriceInfo.decode(reader, reader.uint32());
+                                        message.priceInfo = $root.google.cloud.retail.v2beta.PriceInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -148278,13 +154659,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2beta.CustomAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2beta.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributes, key);
                                         message.attributes[key] = value;
                                         break;
                                     }
@@ -148295,7 +154678,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -148326,14 +154709,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        LocalInventory.verify = function verify(message) {
+                        LocalInventory.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.placeId != null && message.hasOwnProperty("placeId"))
                                 if (!$util.isString(message.placeId))
                                     return "placeId: string expected";
                             if (message.priceInfo != null && message.hasOwnProperty("priceInfo")) {
-                                var error = $root.google.cloud.retail.v2beta.PriceInfo.verify(message.priceInfo);
+                                var error = $root.google.cloud.retail.v2beta.PriceInfo.verify(message.priceInfo, long + 1);
                                 if (error)
                                     return "priceInfo." + error;
                             }
@@ -148342,7 +154729,7 @@
                                     return "attributes: object expected";
                                 var key = Object.keys(message.attributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.CustomAttribute.verify(message.attributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2beta.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                     if (error)
                                         return "attributes." + error;
                                 }
@@ -148365,25 +154752,31 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.LocalInventory} LocalInventory
                          */
-                        LocalInventory.fromObject = function fromObject(object) {
+                        LocalInventory.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.LocalInventory)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.LocalInventory();
                             if (object.placeId != null)
                                 message.placeId = String(object.placeId);
                             if (object.priceInfo != null) {
                                 if (typeof object.priceInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.LocalInventory.priceInfo: object expected");
-                                message.priceInfo = $root.google.cloud.retail.v2beta.PriceInfo.fromObject(object.priceInfo);
+                                message.priceInfo = $root.google.cloud.retail.v2beta.PriceInfo.fromObject(object.priceInfo, long + 1);
                             }
                             if (object.attributes) {
                                 if (typeof object.attributes !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.LocalInventory.attributes: object expected");
                                 message.attributes = {};
                                 for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributes, keys[i]);
                                     if (typeof object.attributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.LocalInventory.attributes: object expected");
-                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2beta.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2beta.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                 }
                             }
                             if (object.fulfillmentTypes) {
@@ -148424,8 +154817,11 @@
                             var keys2;
                             if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                 object.attributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributes, keys2[j]);
                                     object.attributes[keys2[j]] = $root.google.cloud.retail.v2beta.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                }
                             }
                             if (message.fulfillmentTypes && message.fulfillmentTypes.length) {
                                 object.fulfillmentTypes = [];
@@ -148487,7 +154883,7 @@
                             this.droppedPins = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -148568,9 +154964,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PinControlMetadata.decode = function decode(reader, length, error) {
+                        PinControlMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PinControlMetadata(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -148590,10 +154990,10 @@
                                                 key = reader.int64();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
@@ -148613,10 +155013,10 @@
                                                 key = reader.int64();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
@@ -148624,7 +155024,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -148655,9 +155055,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PinControlMetadata.verify = function verify(message) {
+                        PinControlMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.allMatchedPins != null && message.hasOwnProperty("allMatchedPins")) {
                                 if (!$util.isObject(message.allMatchedPins))
                                     return "allMatchedPins: object expected";
@@ -148666,7 +155070,7 @@
                                     if (!$util.key64Re.test(key[i]))
                                         return "allMatchedPins: integer|Long key{k:int64} expected";
                                     {
-                                        var error = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.verify(message.allMatchedPins[key[i]]);
+                                        var error = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.verify(message.allMatchedPins[key[i]], long + 1);
                                         if (error)
                                             return "allMatchedPins." + error;
                                     }
@@ -148680,7 +155084,7 @@
                                     if (!$util.key64Re.test(key[i]))
                                         return "droppedPins: integer|Long key{k:int64} expected";
                                     {
-                                        var error = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.verify(message.droppedPins[key[i]]);
+                                        var error = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.verify(message.droppedPins[key[i]], long + 1);
                                         if (error)
                                             return "droppedPins." + error;
                                     }
@@ -148697,18 +155101,24 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PinControlMetadata} PinControlMetadata
                          */
-                        PinControlMetadata.fromObject = function fromObject(object) {
+                        PinControlMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PinControlMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PinControlMetadata();
                             if (object.allMatchedPins) {
                                 if (typeof object.allMatchedPins !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.PinControlMetadata.allMatchedPins: object expected");
                                 message.allMatchedPins = {};
                                 for (var keys = Object.keys(object.allMatchedPins), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.allMatchedPins, keys[i]);
                                     if (typeof object.allMatchedPins[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.PinControlMetadata.allMatchedPins: object expected");
-                                    message.allMatchedPins[keys[i]] = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.fromObject(object.allMatchedPins[keys[i]]);
+                                    message.allMatchedPins[keys[i]] = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.fromObject(object.allMatchedPins[keys[i]], long + 1);
                                 }
                             }
                             if (object.droppedPins) {
@@ -148716,9 +155126,11 @@
                                     throw TypeError(".google.cloud.retail.v2beta.PinControlMetadata.droppedPins: object expected");
                                 message.droppedPins = {};
                                 for (var keys = Object.keys(object.droppedPins), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.droppedPins, keys[i]);
                                     if (typeof object.droppedPins[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.PinControlMetadata.droppedPins: object expected");
-                                    message.droppedPins[keys[i]] = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.fromObject(object.droppedPins[keys[i]]);
+                                    message.droppedPins[keys[i]] = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.fromObject(object.droppedPins[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -148744,13 +155156,19 @@
                             var keys2;
                             if (message.allMatchedPins && (keys2 = Object.keys(message.allMatchedPins)).length) {
                                 object.allMatchedPins = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.allMatchedPins, keys2[j]);
                                     object.allMatchedPins[keys2[j]] = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.toObject(message.allMatchedPins[keys2[j]], options);
+                                }
                             }
                             if (message.droppedPins && (keys2 = Object.keys(message.droppedPins)).length) {
                                 object.droppedPins = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.droppedPins, keys2[j]);
                                     object.droppedPins[keys2[j]] = $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins.toObject(message.droppedPins[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -148802,7 +155220,7 @@
                                 this.productId = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -148868,9 +155286,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ProductPins.decode = function decode(reader, length, error) {
+                            ProductPins.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -148884,7 +155306,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -148915,9 +155337,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ProductPins.verify = function verify(message) {
+                            ProductPins.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.productId != null && message.hasOwnProperty("productId")) {
                                     if (!Array.isArray(message.productId))
                                         return "productId: array expected";
@@ -148936,9 +155362,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.PinControlMetadata.ProductPins} ProductPins
                              */
-                            ProductPins.fromObject = function fromObject(object) {
+                            ProductPins.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.PinControlMetadata.ProductPins();
                                 if (object.productId) {
                                     if (!Array.isArray(object.productId))
@@ -149026,7 +155456,7 @@
                             this.values = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -149092,9 +155522,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        StringList.decode = function decode(reader, length, error) {
+                        StringList.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.StringList();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -149108,7 +155542,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -149139,9 +155573,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        StringList.verify = function verify(message) {
+                        StringList.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.values != null && message.hasOwnProperty("values")) {
                                 if (!Array.isArray(message.values))
                                     return "values: array expected";
@@ -149160,9 +155598,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.StringList} StringList
                          */
-                        StringList.fromObject = function fromObject(object) {
+                        StringList.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.StringList)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.StringList();
                             if (object.values) {
                                 if (!Array.isArray(object.values))
@@ -149247,7 +155689,7 @@
                             this.values = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -149316,9 +155758,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DoubleList.decode = function decode(reader, length, error) {
+                        DoubleList.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.DoubleList();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -149337,7 +155783,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -149368,9 +155814,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DoubleList.verify = function verify(message) {
+                        DoubleList.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.values != null && message.hasOwnProperty("values")) {
                                 if (!Array.isArray(message.values))
                                     return "values: array expected";
@@ -149389,9 +155839,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.DoubleList} DoubleList
                          */
-                        DoubleList.fromObject = function fromObject(object) {
+                        DoubleList.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.DoubleList)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.DoubleList();
                             if (object.values) {
                                 if (!Array.isArray(object.values))
@@ -149477,7 +155931,7 @@
                             this.inputUris = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -149553,9 +156007,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GcsSource.decode = function decode(reader, length, error) {
+                        GcsSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GcsSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -149573,7 +156031,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -149604,9 +156062,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GcsSource.verify = function verify(message) {
+                        GcsSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.inputUris != null && message.hasOwnProperty("inputUris")) {
                                 if (!Array.isArray(message.inputUris))
                                     return "inputUris: array expected";
@@ -149628,9 +156090,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GcsSource} GcsSource
                          */
-                        GcsSource.fromObject = function fromObject(object) {
+                        GcsSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GcsSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GcsSource();
                             if (object.inputUris) {
                                 if (!Array.isArray(object.inputUris))
@@ -149725,7 +156191,7 @@
                         function BigQuerySource(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -149854,9 +156320,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BigQuerySource.decode = function decode(reader, length, error) {
+                        BigQuerySource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.BigQuerySource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -149864,7 +156334,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 6: {
-                                        message.partitionDate = $root.google.type.Date.decode(reader, reader.uint32());
+                                        message.partitionDate = $root.google.type.Date.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -149888,7 +156358,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -149919,14 +156389,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BigQuerySource.verify = function verify(message) {
+                        BigQuerySource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.partitionDate != null && message.hasOwnProperty("partitionDate")) {
                                 properties.partition = 1;
                                 {
-                                    var error = $root.google.type.Date.verify(message.partitionDate);
+                                    var error = $root.google.type.Date.verify(message.partitionDate, long + 1);
                                     if (error)
                                         return "partitionDate." + error;
                                 }
@@ -149957,14 +156431,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.BigQuerySource} BigQuerySource
                          */
-                        BigQuerySource.fromObject = function fromObject(object) {
+                        BigQuerySource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.BigQuerySource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.BigQuerySource();
                             if (object.partitionDate != null) {
                                 if (typeof object.partitionDate !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.BigQuerySource.partitionDate: object expected");
-                                message.partitionDate = $root.google.type.Date.fromObject(object.partitionDate);
+                                message.partitionDate = $root.google.type.Date.fromObject(object.partitionDate, long + 1);
                             }
                             if (object.projectId != null)
                                 message.projectId = String(object.projectId);
@@ -150067,7 +156545,7 @@
                             this.products = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -150133,9 +156611,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductInlineSource.decode = function decode(reader, length, error) {
+                        ProductInlineSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ProductInlineSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -150145,11 +156627,11 @@
                                 case 1: {
                                         if (!(message.products && message.products.length))
                                             message.products = [];
-                                        message.products.push($root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32()));
+                                        message.products.push($root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -150180,14 +156662,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductInlineSource.verify = function verify(message) {
+                        ProductInlineSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.products != null && message.hasOwnProperty("products")) {
                                 if (!Array.isArray(message.products))
                                     return "products: array expected";
                                 for (var i = 0; i < message.products.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Product.verify(message.products[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Product.verify(message.products[i], long + 1);
                                     if (error)
                                         return "products." + error;
                                 }
@@ -150203,9 +156689,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ProductInlineSource} ProductInlineSource
                          */
-                        ProductInlineSource.fromObject = function fromObject(object) {
+                        ProductInlineSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ProductInlineSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ProductInlineSource();
                             if (object.products) {
                                 if (!Array.isArray(object.products))
@@ -150214,7 +156704,7 @@
                                 for (var i = 0; i < object.products.length; ++i) {
                                     if (typeof object.products[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ProductInlineSource.products: object expected");
-                                    message.products[i] = $root.google.cloud.retail.v2beta.Product.fromObject(object.products[i]);
+                                    message.products[i] = $root.google.cloud.retail.v2beta.Product.fromObject(object.products[i], long + 1);
                                 }
                             }
                             return message;
@@ -150293,7 +156783,7 @@
                             this.userEvents = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -150359,9 +156849,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEventInlineSource.decode = function decode(reader, length, error) {
+                        UserEventInlineSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UserEventInlineSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -150371,11 +156865,11 @@
                                 case 1: {
                                         if (!(message.userEvents && message.userEvents.length))
                                             message.userEvents = [];
-                                        message.userEvents.push($root.google.cloud.retail.v2beta.UserEvent.decode(reader, reader.uint32()));
+                                        message.userEvents.push($root.google.cloud.retail.v2beta.UserEvent.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -150406,14 +156900,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEventInlineSource.verify = function verify(message) {
+                        UserEventInlineSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.userEvents != null && message.hasOwnProperty("userEvents")) {
                                 if (!Array.isArray(message.userEvents))
                                     return "userEvents: array expected";
                                 for (var i = 0; i < message.userEvents.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.UserEvent.verify(message.userEvents[i]);
+                                    var error = $root.google.cloud.retail.v2beta.UserEvent.verify(message.userEvents[i], long + 1);
                                     if (error)
                                         return "userEvents." + error;
                                 }
@@ -150429,9 +156927,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UserEventInlineSource} UserEventInlineSource
                          */
-                        UserEventInlineSource.fromObject = function fromObject(object) {
+                        UserEventInlineSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UserEventInlineSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UserEventInlineSource();
                             if (object.userEvents) {
                                 if (!Array.isArray(object.userEvents))
@@ -150440,7 +156942,7 @@
                                 for (var i = 0; i < object.userEvents.length; ++i) {
                                     if (typeof object.userEvents[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.UserEventInlineSource.userEvents: object expected");
-                                    message.userEvents[i] = $root.google.cloud.retail.v2beta.UserEvent.fromObject(object.userEvents[i]);
+                                    message.userEvents[i] = $root.google.cloud.retail.v2beta.UserEvent.fromObject(object.userEvents[i], long + 1);
                                 }
                             }
                             return message;
@@ -150518,7 +157020,7 @@
                         function ImportErrorsConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -150597,9 +157099,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportErrorsConfig.decode = function decode(reader, length, error) {
+                        ImportErrorsConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ImportErrorsConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -150611,7 +157117,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -150642,9 +157148,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportErrorsConfig.verify = function verify(message) {
+                        ImportErrorsConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.gcsPrefix != null && message.hasOwnProperty("gcsPrefix")) {
                                 properties.destination = 1;
@@ -150662,9 +157172,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ImportErrorsConfig} ImportErrorsConfig
                          */
-                        ImportErrorsConfig.fromObject = function fromObject(object) {
+                        ImportErrorsConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ImportErrorsConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ImportErrorsConfig();
                             if (object.gcsPrefix != null)
                                 message.gcsPrefix = String(object.gcsPrefix);
@@ -150747,7 +157261,7 @@
                         function ImportProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -150872,9 +157386,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportProductsRequest.decode = function decode(reader, length, error) {
+                        ImportProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ImportProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -150890,15 +157408,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.inputConfig = $root.google.cloud.retail.v2beta.ProductInputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.retail.v2beta.ProductInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -150910,7 +157428,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -150941,9 +157459,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportProductsRequest.verify = function verify(message) {
+                        ImportProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -150951,17 +157473,17 @@
                                 if (!$util.isString(message.requestId))
                                     return "requestId: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ProductInputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.retail.v2beta.ProductInputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2beta.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -150988,9 +157510,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ImportProductsRequest} ImportProductsRequest
                          */
-                        ImportProductsRequest.fromObject = function fromObject(object) {
+                        ImportProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ImportProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ImportProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -150999,17 +157525,17 @@
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportProductsRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.retail.v2beta.ProductInputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.retail.v2beta.ProductInputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportProductsRequest.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportProductsRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             switch (object.reconciliationMode) {
                             default:
@@ -151142,7 +157668,7 @@
                         function ImportUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -151227,9 +157753,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportUserEventsRequest.decode = function decode(reader, length, error) {
+                        ImportUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ImportUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -151241,15 +157771,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.inputConfig = $root.google.cloud.retail.v2beta.UserEventInputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.retail.v2beta.UserEventInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -151280,19 +157810,23 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportUserEventsRequest.verify = function verify(message) {
+                        ImportUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.UserEventInputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.retail.v2beta.UserEventInputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2beta.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
@@ -151307,21 +157841,25 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ImportUserEventsRequest} ImportUserEventsRequest
                          */
-                        ImportUserEventsRequest.fromObject = function fromObject(object) {
+                        ImportUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ImportUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ImportUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportUserEventsRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.retail.v2beta.UserEventInputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.retail.v2beta.UserEventInputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportUserEventsRequest.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             return message;
                         };
@@ -151404,7 +157942,7 @@
                         function ImportCompletionDataRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -151489,9 +158027,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportCompletionDataRequest.decode = function decode(reader, length, error) {
+                        ImportCompletionDataRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ImportCompletionDataRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -151503,7 +158045,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.inputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.decode(reader, reader.uint32());
+                                        message.inputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -151511,7 +158053,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -151542,14 +158084,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportCompletionDataRequest.verify = function verify(message) {
+                        ImportCompletionDataRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.verify(message.inputConfig);
+                                var error = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.verify(message.inputConfig, long + 1);
                                 if (error)
                                     return "inputConfig." + error;
                             }
@@ -151567,16 +158113,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ImportCompletionDataRequest} ImportCompletionDataRequest
                          */
-                        ImportCompletionDataRequest.fromObject = function fromObject(object) {
+                        ImportCompletionDataRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ImportCompletionDataRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ImportCompletionDataRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.inputConfig != null) {
                                 if (typeof object.inputConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportCompletionDataRequest.inputConfig: object expected");
-                                message.inputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.fromObject(object.inputConfig);
+                                message.inputConfig = $root.google.cloud.retail.v2beta.CompletionDataInputConfig.fromObject(object.inputConfig, long + 1);
                             }
                             if (object.notificationPubsubTopic != null)
                                 message.notificationPubsubTopic = String(object.notificationPubsubTopic);
@@ -151661,7 +158211,7 @@
                         function ProductInputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -151760,9 +158310,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductInputConfig.decode = function decode(reader, length, error) {
+                        ProductInputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ProductInputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -151770,19 +158324,19 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.productInlineSource = $root.google.cloud.retail.v2beta.ProductInlineSource.decode(reader, reader.uint32());
+                                        message.productInlineSource = $root.google.cloud.retail.v2beta.ProductInlineSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.gcsSource = $root.google.cloud.retail.v2beta.GcsSource.decode(reader, reader.uint32());
+                                        message.gcsSource = $root.google.cloud.retail.v2beta.GcsSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.decode(reader, reader.uint32());
+                                        message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -151813,14 +158367,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductInputConfig.verify = function verify(message) {
+                        ProductInputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.productInlineSource != null && message.hasOwnProperty("productInlineSource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.ProductInlineSource.verify(message.productInlineSource);
+                                    var error = $root.google.cloud.retail.v2beta.ProductInlineSource.verify(message.productInlineSource, long + 1);
                                     if (error)
                                         return "productInlineSource." + error;
                                 }
@@ -151830,7 +158388,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.GcsSource.verify(message.gcsSource);
+                                    var error = $root.google.cloud.retail.v2beta.GcsSource.verify(message.gcsSource, long + 1);
                                     if (error)
                                         return "gcsSource." + error;
                                 }
@@ -151840,7 +158398,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.BigQuerySource.verify(message.bigQuerySource);
+                                    var error = $root.google.cloud.retail.v2beta.BigQuerySource.verify(message.bigQuerySource, long + 1);
                                     if (error)
                                         return "bigQuerySource." + error;
                                 }
@@ -151856,24 +158414,28 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ProductInputConfig} ProductInputConfig
                          */
-                        ProductInputConfig.fromObject = function fromObject(object) {
+                        ProductInputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ProductInputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ProductInputConfig();
                             if (object.productInlineSource != null) {
                                 if (typeof object.productInlineSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ProductInputConfig.productInlineSource: object expected");
-                                message.productInlineSource = $root.google.cloud.retail.v2beta.ProductInlineSource.fromObject(object.productInlineSource);
+                                message.productInlineSource = $root.google.cloud.retail.v2beta.ProductInlineSource.fromObject(object.productInlineSource, long + 1);
                             }
                             if (object.gcsSource != null) {
                                 if (typeof object.gcsSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ProductInputConfig.gcsSource: object expected");
-                                message.gcsSource = $root.google.cloud.retail.v2beta.GcsSource.fromObject(object.gcsSource);
+                                message.gcsSource = $root.google.cloud.retail.v2beta.GcsSource.fromObject(object.gcsSource, long + 1);
                             }
                             if (object.bigQuerySource != null) {
                                 if (typeof object.bigQuerySource !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ProductInputConfig.bigQuerySource: object expected");
-                                message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.fromObject(object.bigQuerySource);
+                                message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.fromObject(object.bigQuerySource, long + 1);
                             }
                             return message;
                         };
@@ -151960,7 +158522,7 @@
                         function UserEventInputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -152059,9 +158621,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEventInputConfig.decode = function decode(reader, length, error) {
+                        UserEventInputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UserEventInputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -152069,19 +158635,19 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.userEventInlineSource = $root.google.cloud.retail.v2beta.UserEventInlineSource.decode(reader, reader.uint32());
+                                        message.userEventInlineSource = $root.google.cloud.retail.v2beta.UserEventInlineSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.gcsSource = $root.google.cloud.retail.v2beta.GcsSource.decode(reader, reader.uint32());
+                                        message.gcsSource = $root.google.cloud.retail.v2beta.GcsSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.decode(reader, reader.uint32());
+                                        message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -152112,14 +158678,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEventInputConfig.verify = function verify(message) {
+                        UserEventInputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.userEventInlineSource != null && message.hasOwnProperty("userEventInlineSource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.UserEventInlineSource.verify(message.userEventInlineSource);
+                                    var error = $root.google.cloud.retail.v2beta.UserEventInlineSource.verify(message.userEventInlineSource, long + 1);
                                     if (error)
                                         return "userEventInlineSource." + error;
                                 }
@@ -152129,7 +158699,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.GcsSource.verify(message.gcsSource);
+                                    var error = $root.google.cloud.retail.v2beta.GcsSource.verify(message.gcsSource, long + 1);
                                     if (error)
                                         return "gcsSource." + error;
                                 }
@@ -152139,7 +158709,7 @@
                                     return "source: multiple values";
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.BigQuerySource.verify(message.bigQuerySource);
+                                    var error = $root.google.cloud.retail.v2beta.BigQuerySource.verify(message.bigQuerySource, long + 1);
                                     if (error)
                                         return "bigQuerySource." + error;
                                 }
@@ -152155,24 +158725,28 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UserEventInputConfig} UserEventInputConfig
                          */
-                        UserEventInputConfig.fromObject = function fromObject(object) {
+                        UserEventInputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UserEventInputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UserEventInputConfig();
                             if (object.userEventInlineSource != null) {
                                 if (typeof object.userEventInlineSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UserEventInputConfig.userEventInlineSource: object expected");
-                                message.userEventInlineSource = $root.google.cloud.retail.v2beta.UserEventInlineSource.fromObject(object.userEventInlineSource);
+                                message.userEventInlineSource = $root.google.cloud.retail.v2beta.UserEventInlineSource.fromObject(object.userEventInlineSource, long + 1);
                             }
                             if (object.gcsSource != null) {
                                 if (typeof object.gcsSource !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UserEventInputConfig.gcsSource: object expected");
-                                message.gcsSource = $root.google.cloud.retail.v2beta.GcsSource.fromObject(object.gcsSource);
+                                message.gcsSource = $root.google.cloud.retail.v2beta.GcsSource.fromObject(object.gcsSource, long + 1);
                             }
                             if (object.bigQuerySource != null) {
                                 if (typeof object.bigQuerySource !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UserEventInputConfig.bigQuerySource: object expected");
-                                message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.fromObject(object.bigQuerySource);
+                                message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.fromObject(object.bigQuerySource, long + 1);
                             }
                             return message;
                         };
@@ -152257,7 +158831,7 @@
                         function CompletionDataInputConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -152336,9 +158910,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompletionDataInputConfig.decode = function decode(reader, length, error) {
+                        CompletionDataInputConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CompletionDataInputConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -152346,11 +158924,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.decode(reader, reader.uint32());
+                                        message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -152381,14 +158959,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompletionDataInputConfig.verify = function verify(message) {
+                        CompletionDataInputConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.bigQuerySource != null && message.hasOwnProperty("bigQuerySource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.BigQuerySource.verify(message.bigQuerySource);
+                                    var error = $root.google.cloud.retail.v2beta.BigQuerySource.verify(message.bigQuerySource, long + 1);
                                     if (error)
                                         return "bigQuerySource." + error;
                                 }
@@ -152404,14 +158986,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CompletionDataInputConfig} CompletionDataInputConfig
                          */
-                        CompletionDataInputConfig.fromObject = function fromObject(object) {
+                        CompletionDataInputConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CompletionDataInputConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CompletionDataInputConfig();
                             if (object.bigQuerySource != null) {
                                 if (typeof object.bigQuerySource !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.CompletionDataInputConfig.bigQuerySource: object expected");
-                                message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.fromObject(object.bigQuerySource);
+                                message.bigQuerySource = $root.google.cloud.retail.v2beta.BigQuerySource.fromObject(object.bigQuerySource, long + 1);
                             }
                             return message;
                         };
@@ -152491,7 +159077,7 @@
                         function ImportMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -152606,9 +159192,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportMetadata.decode = function decode(reader, length, error) {
+                        ImportMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ImportMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -152616,11 +159206,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -152640,7 +159230,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -152671,16 +159261,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportMetadata.verify = function verify(message) {
+                        ImportMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -152707,19 +159301,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ImportMetadata} ImportMetadata
                          */
-                        ImportMetadata.fromObject = function fromObject(object) {
+                        ImportMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ImportMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ImportMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportMetadata.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.successCount != null)
                                 if ($util.Long)
@@ -152847,7 +159445,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -152923,9 +159521,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportProductsResponse.decode = function decode(reader, length, error) {
+                        ImportProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ImportProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -152935,15 +159537,15 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -152974,20 +159576,24 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportProductsResponse.verify = function verify(message) {
+                        ImportProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2beta.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
@@ -153002,9 +159608,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ImportProductsResponse} ImportProductsResponse
                          */
-                        ImportProductsResponse.fromObject = function fromObject(object) {
+                        ImportProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ImportProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ImportProductsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -153013,13 +159623,13 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ImportProductsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportProductsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             return message;
                         };
@@ -153103,7 +159713,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -153189,9 +159799,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportUserEventsResponse.decode = function decode(reader, length, error) {
+                        ImportUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ImportUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -153201,19 +159815,19 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
-                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.decode(reader, reader.uint32());
+                                        message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.importSummary = $root.google.cloud.retail.v2beta.UserEventImportSummary.decode(reader, reader.uint32());
+                                        message.importSummary = $root.google.cloud.retail.v2beta.UserEventImportSummary.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -153244,25 +159858,29 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportUserEventsResponse.verify = function verify(message) {
+                        ImportUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
                             }
                             if (message.errorsConfig != null && message.hasOwnProperty("errorsConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ImportErrorsConfig.verify(message.errorsConfig);
+                                var error = $root.google.cloud.retail.v2beta.ImportErrorsConfig.verify(message.errorsConfig, long + 1);
                                 if (error)
                                     return "errorsConfig." + error;
                             }
                             if (message.importSummary != null && message.hasOwnProperty("importSummary")) {
-                                var error = $root.google.cloud.retail.v2beta.UserEventImportSummary.verify(message.importSummary);
+                                var error = $root.google.cloud.retail.v2beta.UserEventImportSummary.verify(message.importSummary, long + 1);
                                 if (error)
                                     return "importSummary." + error;
                             }
@@ -153277,9 +159895,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ImportUserEventsResponse} ImportUserEventsResponse
                          */
-                        ImportUserEventsResponse.fromObject = function fromObject(object) {
+                        ImportUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ImportUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ImportUserEventsResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -153288,18 +159910,18 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ImportUserEventsResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             if (object.errorsConfig != null) {
                                 if (typeof object.errorsConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportUserEventsResponse.errorsConfig: object expected");
-                                message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.fromObject(object.errorsConfig);
+                                message.errorsConfig = $root.google.cloud.retail.v2beta.ImportErrorsConfig.fromObject(object.errorsConfig, long + 1);
                             }
                             if (object.importSummary != null) {
                                 if (typeof object.importSummary !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ImportUserEventsResponse.importSummary: object expected");
-                                message.importSummary = $root.google.cloud.retail.v2beta.UserEventImportSummary.fromObject(object.importSummary);
+                                message.importSummary = $root.google.cloud.retail.v2beta.UserEventImportSummary.fromObject(object.importSummary, long + 1);
                             }
                             return message;
                         };
@@ -153385,7 +160007,7 @@
                         function UserEventImportSummary(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -153460,9 +160082,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEventImportSummary.decode = function decode(reader, length, error) {
+                        UserEventImportSummary.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UserEventImportSummary();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -153478,7 +160104,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -153509,9 +160135,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEventImportSummary.verify = function verify(message) {
+                        UserEventImportSummary.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.joinedEventsCount != null && message.hasOwnProperty("joinedEventsCount"))
                                 if (!$util.isInteger(message.joinedEventsCount) && !(message.joinedEventsCount && $util.isInteger(message.joinedEventsCount.low) && $util.isInteger(message.joinedEventsCount.high)))
                                     return "joinedEventsCount: integer|Long expected";
@@ -153529,9 +160159,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UserEventImportSummary} UserEventImportSummary
                          */
-                        UserEventImportSummary.fromObject = function fromObject(object) {
+                        UserEventImportSummary.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UserEventImportSummary)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UserEventImportSummary();
                             if (object.joinedEventsCount != null)
                                 if ($util.Long)
@@ -153642,7 +160276,7 @@
                             this.errorSamples = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -153708,9 +160342,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ImportCompletionDataResponse.decode = function decode(reader, length, error) {
+                        ImportCompletionDataResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ImportCompletionDataResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -153720,11 +160358,11 @@
                                 case 1: {
                                         if (!(message.errorSamples && message.errorSamples.length))
                                             message.errorSamples = [];
-                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32()));
+                                        message.errorSamples.push($root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -153755,14 +160393,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ImportCompletionDataResponse.verify = function verify(message) {
+                        ImportCompletionDataResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.errorSamples != null && message.hasOwnProperty("errorSamples")) {
                                 if (!Array.isArray(message.errorSamples))
                                     return "errorSamples: array expected";
                                 for (var i = 0; i < message.errorSamples.length; ++i) {
-                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i]);
+                                    var error = $root.google.rpc.Status.verify(message.errorSamples[i], long + 1);
                                     if (error)
                                         return "errorSamples." + error;
                                 }
@@ -153778,9 +160420,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ImportCompletionDataResponse} ImportCompletionDataResponse
                          */
-                        ImportCompletionDataResponse.fromObject = function fromObject(object) {
+                        ImportCompletionDataResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ImportCompletionDataResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ImportCompletionDataResponse();
                             if (object.errorSamples) {
                                 if (!Array.isArray(object.errorSamples))
@@ -153789,7 +160435,7 @@
                                 for (var i = 0; i < object.errorSamples.length; ++i) {
                                     if (typeof object.errorSamples[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ImportCompletionDataResponse.errorSamples: object expected");
-                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i]);
+                                    message.errorSamples[i] = $root.google.rpc.Status.fromObject(object.errorSamples[i], long + 1);
                                 }
                             }
                             return message;
@@ -153914,7 +160560,7 @@
                             this.localInventories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -154339,9 +160985,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Product.decode = function decode(reader, length, error) {
+                        Product.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Product(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -154349,11 +160999,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 16: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 17: {
-                                        message.ttl = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.ttl = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
@@ -154419,13 +161069,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2beta.CustomAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2beta.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributes, key);
                                         message.attributes[key] = value;
                                         break;
                                     }
@@ -154436,15 +161088,15 @@
                                         break;
                                     }
                                 case 14: {
-                                        message.priceInfo = $root.google.cloud.retail.v2beta.PriceInfo.decode(reader, reader.uint32());
+                                        message.priceInfo = $root.google.cloud.retail.v2beta.PriceInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 15: {
-                                        message.rating = $root.google.cloud.retail.v2beta.Rating.decode(reader, reader.uint32());
+                                        message.rating = $root.google.cloud.retail.v2beta.Rating.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 18: {
-                                        message.availableTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.availableTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
@@ -154452,13 +161104,13 @@
                                         break;
                                     }
                                 case 20: {
-                                        message.availableQuantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32());
+                                        message.availableQuantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 21: {
                                         if (!(message.fulfillmentInfo && message.fulfillmentInfo.length))
                                             message.fulfillmentInfo = [];
-                                        message.fulfillmentInfo.push($root.google.cloud.retail.v2beta.FulfillmentInfo.decode(reader, reader.uint32()));
+                                        message.fulfillmentInfo.push($root.google.cloud.retail.v2beta.FulfillmentInfo.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 22: {
@@ -154468,15 +161120,15 @@
                                 case 23: {
                                         if (!(message.images && message.images.length))
                                             message.images = [];
-                                        message.images.push($root.google.cloud.retail.v2beta.Image.decode(reader, reader.uint32()));
+                                        message.images.push($root.google.cloud.retail.v2beta.Image.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 24: {
-                                        message.audience = $root.google.cloud.retail.v2beta.Audience.decode(reader, reader.uint32());
+                                        message.audience = $root.google.cloud.retail.v2beta.Audience.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 25: {
-                                        message.colorInfo = $root.google.cloud.retail.v2beta.ColorInfo.decode(reader, reader.uint32());
+                                        message.colorInfo = $root.google.cloud.retail.v2beta.ColorInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 26: {
@@ -154506,31 +161158,31 @@
                                 case 34: {
                                         if (!(message.promotions && message.promotions.length))
                                             message.promotions = [];
-                                        message.promotions.push($root.google.cloud.retail.v2beta.Promotion.decode(reader, reader.uint32()));
+                                        message.promotions.push($root.google.cloud.retail.v2beta.Promotion.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 33: {
-                                        message.publishTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.publishTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 30: {
-                                        message.retrievableFields = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.retrievableFields = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 31: {
                                         if (!(message.variants && message.variants.length))
                                             message.variants = [];
-                                        message.variants.push($root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32()));
+                                        message.variants.push($root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 35: {
                                         if (!(message.localInventories && message.localInventories.length))
                                             message.localInventories = [];
-                                        message.localInventories.push($root.google.cloud.retail.v2beta.LocalInventory.decode(reader, reader.uint32()));
+                                        message.localInventories.push($root.google.cloud.retail.v2beta.LocalInventory.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -154561,14 +161213,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Product.verify = function verify(message) {
+                        Product.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
                                 properties.expiration = 1;
                                 {
-                                    var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                    var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                     if (error)
                                         return "expireTime." + error;
                                 }
@@ -154578,7 +161234,7 @@
                                     return "expiration: multiple values";
                                 properties.expiration = 1;
                                 {
-                                    var error = $root.google.protobuf.Duration.verify(message.ttl);
+                                    var error = $root.google.protobuf.Duration.verify(message.ttl, long + 1);
                                     if (error)
                                         return "ttl." + error;
                                 }
@@ -154640,7 +161296,7 @@
                                     return "attributes: object expected";
                                 var key = Object.keys(message.attributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.CustomAttribute.verify(message.attributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2beta.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                     if (error)
                                         return "attributes." + error;
                                 }
@@ -154653,17 +161309,17 @@
                                         return "tags: string[] expected";
                             }
                             if (message.priceInfo != null && message.hasOwnProperty("priceInfo")) {
-                                var error = $root.google.cloud.retail.v2beta.PriceInfo.verify(message.priceInfo);
+                                var error = $root.google.cloud.retail.v2beta.PriceInfo.verify(message.priceInfo, long + 1);
                                 if (error)
                                     return "priceInfo." + error;
                             }
                             if (message.rating != null && message.hasOwnProperty("rating")) {
-                                var error = $root.google.cloud.retail.v2beta.Rating.verify(message.rating);
+                                var error = $root.google.cloud.retail.v2beta.Rating.verify(message.rating, long + 1);
                                 if (error)
                                     return "rating." + error;
                             }
                             if (message.availableTime != null && message.hasOwnProperty("availableTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.availableTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.availableTime, long + 1);
                                 if (error)
                                     return "availableTime." + error;
                             }
@@ -154679,7 +161335,7 @@
                                     break;
                                 }
                             if (message.availableQuantity != null && message.hasOwnProperty("availableQuantity")) {
-                                var error = $root.google.protobuf.Int32Value.verify(message.availableQuantity);
+                                var error = $root.google.protobuf.Int32Value.verify(message.availableQuantity, long + 1);
                                 if (error)
                                     return "availableQuantity." + error;
                             }
@@ -154687,7 +161343,7 @@
                                 if (!Array.isArray(message.fulfillmentInfo))
                                     return "fulfillmentInfo: array expected";
                                 for (var i = 0; i < message.fulfillmentInfo.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.FulfillmentInfo.verify(message.fulfillmentInfo[i]);
+                                    var error = $root.google.cloud.retail.v2beta.FulfillmentInfo.verify(message.fulfillmentInfo[i], long + 1);
                                     if (error)
                                         return "fulfillmentInfo." + error;
                                 }
@@ -154699,18 +161355,18 @@
                                 if (!Array.isArray(message.images))
                                     return "images: array expected";
                                 for (var i = 0; i < message.images.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Image.verify(message.images[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Image.verify(message.images[i], long + 1);
                                     if (error)
                                         return "images." + error;
                                 }
                             }
                             if (message.audience != null && message.hasOwnProperty("audience")) {
-                                var error = $root.google.cloud.retail.v2beta.Audience.verify(message.audience);
+                                var error = $root.google.cloud.retail.v2beta.Audience.verify(message.audience, long + 1);
                                 if (error)
                                     return "audience." + error;
                             }
                             if (message.colorInfo != null && message.hasOwnProperty("colorInfo")) {
-                                var error = $root.google.cloud.retail.v2beta.ColorInfo.verify(message.colorInfo);
+                                var error = $root.google.cloud.retail.v2beta.ColorInfo.verify(message.colorInfo, long + 1);
                                 if (error)
                                     return "colorInfo." + error;
                             }
@@ -154746,18 +161402,18 @@
                                 if (!Array.isArray(message.promotions))
                                     return "promotions: array expected";
                                 for (var i = 0; i < message.promotions.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Promotion.verify(message.promotions[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Promotion.verify(message.promotions[i], long + 1);
                                     if (error)
                                         return "promotions." + error;
                                 }
                             }
                             if (message.publishTime != null && message.hasOwnProperty("publishTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.publishTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.publishTime, long + 1);
                                 if (error)
                                     return "publishTime." + error;
                             }
                             if (message.retrievableFields != null && message.hasOwnProperty("retrievableFields")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.retrievableFields);
+                                var error = $root.google.protobuf.FieldMask.verify(message.retrievableFields, long + 1);
                                 if (error)
                                     return "retrievableFields." + error;
                             }
@@ -154765,7 +161421,7 @@
                                 if (!Array.isArray(message.variants))
                                     return "variants: array expected";
                                 for (var i = 0; i < message.variants.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Product.verify(message.variants[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Product.verify(message.variants[i], long + 1);
                                     if (error)
                                         return "variants." + error;
                                 }
@@ -154774,7 +161430,7 @@
                                 if (!Array.isArray(message.localInventories))
                                     return "localInventories: array expected";
                                 for (var i = 0; i < message.localInventories.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.LocalInventory.verify(message.localInventories[i]);
+                                    var error = $root.google.cloud.retail.v2beta.LocalInventory.verify(message.localInventories[i], long + 1);
                                     if (error)
                                         return "localInventories." + error;
                                 }
@@ -154790,19 +161446,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Product} Product
                          */
-                        Product.fromObject = function fromObject(object) {
+                        Product.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Product)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Product();
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Product.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             if (object.ttl != null) {
                                 if (typeof object.ttl !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Product.ttl: object expected");
-                                message.ttl = $root.google.protobuf.Duration.fromObject(object.ttl);
+                                message.ttl = $root.google.protobuf.Duration.fromObject(object.ttl, long + 1);
                             }
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -154868,9 +161528,11 @@
                                     throw TypeError(".google.cloud.retail.v2beta.Product.attributes: object expected");
                                 message.attributes = {};
                                 for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributes, keys[i]);
                                     if (typeof object.attributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Product.attributes: object expected");
-                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2beta.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2beta.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                 }
                             }
                             if (object.tags) {
@@ -154883,17 +161545,17 @@
                             if (object.priceInfo != null) {
                                 if (typeof object.priceInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Product.priceInfo: object expected");
-                                message.priceInfo = $root.google.cloud.retail.v2beta.PriceInfo.fromObject(object.priceInfo);
+                                message.priceInfo = $root.google.cloud.retail.v2beta.PriceInfo.fromObject(object.priceInfo, long + 1);
                             }
                             if (object.rating != null) {
                                 if (typeof object.rating !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Product.rating: object expected");
-                                message.rating = $root.google.cloud.retail.v2beta.Rating.fromObject(object.rating);
+                                message.rating = $root.google.cloud.retail.v2beta.Rating.fromObject(object.rating, long + 1);
                             }
                             if (object.availableTime != null) {
                                 if (typeof object.availableTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Product.availableTime: object expected");
-                                message.availableTime = $root.google.protobuf.Timestamp.fromObject(object.availableTime);
+                                message.availableTime = $root.google.protobuf.Timestamp.fromObject(object.availableTime, long + 1);
                             }
                             switch (object.availability) {
                             default:
@@ -154926,7 +161588,7 @@
                             if (object.availableQuantity != null) {
                                 if (typeof object.availableQuantity !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Product.availableQuantity: object expected");
-                                message.availableQuantity = $root.google.protobuf.Int32Value.fromObject(object.availableQuantity);
+                                message.availableQuantity = $root.google.protobuf.Int32Value.fromObject(object.availableQuantity, long + 1);
                             }
                             if (object.fulfillmentInfo) {
                                 if (!Array.isArray(object.fulfillmentInfo))
@@ -154935,7 +161597,7 @@
                                 for (var i = 0; i < object.fulfillmentInfo.length; ++i) {
                                     if (typeof object.fulfillmentInfo[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Product.fulfillmentInfo: object expected");
-                                    message.fulfillmentInfo[i] = $root.google.cloud.retail.v2beta.FulfillmentInfo.fromObject(object.fulfillmentInfo[i]);
+                                    message.fulfillmentInfo[i] = $root.google.cloud.retail.v2beta.FulfillmentInfo.fromObject(object.fulfillmentInfo[i], long + 1);
                                 }
                             }
                             if (object.uri != null)
@@ -154947,18 +161609,18 @@
                                 for (var i = 0; i < object.images.length; ++i) {
                                     if (typeof object.images[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Product.images: object expected");
-                                    message.images[i] = $root.google.cloud.retail.v2beta.Image.fromObject(object.images[i]);
+                                    message.images[i] = $root.google.cloud.retail.v2beta.Image.fromObject(object.images[i], long + 1);
                                 }
                             }
                             if (object.audience != null) {
                                 if (typeof object.audience !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Product.audience: object expected");
-                                message.audience = $root.google.cloud.retail.v2beta.Audience.fromObject(object.audience);
+                                message.audience = $root.google.cloud.retail.v2beta.Audience.fromObject(object.audience, long + 1);
                             }
                             if (object.colorInfo != null) {
                                 if (typeof object.colorInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Product.colorInfo: object expected");
-                                message.colorInfo = $root.google.cloud.retail.v2beta.ColorInfo.fromObject(object.colorInfo);
+                                message.colorInfo = $root.google.cloud.retail.v2beta.ColorInfo.fromObject(object.colorInfo, long + 1);
                             }
                             if (object.sizes) {
                                 if (!Array.isArray(object.sizes))
@@ -154995,18 +161657,18 @@
                                 for (var i = 0; i < object.promotions.length; ++i) {
                                     if (typeof object.promotions[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Product.promotions: object expected");
-                                    message.promotions[i] = $root.google.cloud.retail.v2beta.Promotion.fromObject(object.promotions[i]);
+                                    message.promotions[i] = $root.google.cloud.retail.v2beta.Promotion.fromObject(object.promotions[i], long + 1);
                                 }
                             }
                             if (object.publishTime != null) {
                                 if (typeof object.publishTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Product.publishTime: object expected");
-                                message.publishTime = $root.google.protobuf.Timestamp.fromObject(object.publishTime);
+                                message.publishTime = $root.google.protobuf.Timestamp.fromObject(object.publishTime, long + 1);
                             }
                             if (object.retrievableFields != null) {
                                 if (typeof object.retrievableFields !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Product.retrievableFields: object expected");
-                                message.retrievableFields = $root.google.protobuf.FieldMask.fromObject(object.retrievableFields);
+                                message.retrievableFields = $root.google.protobuf.FieldMask.fromObject(object.retrievableFields, long + 1);
                             }
                             if (object.variants) {
                                 if (!Array.isArray(object.variants))
@@ -155015,7 +161677,7 @@
                                 for (var i = 0; i < object.variants.length; ++i) {
                                     if (typeof object.variants[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Product.variants: object expected");
-                                    message.variants[i] = $root.google.cloud.retail.v2beta.Product.fromObject(object.variants[i]);
+                                    message.variants[i] = $root.google.cloud.retail.v2beta.Product.fromObject(object.variants[i], long + 1);
                                 }
                             }
                             if (object.localInventories) {
@@ -155025,7 +161687,7 @@
                                 for (var i = 0; i < object.localInventories.length; ++i) {
                                     if (typeof object.localInventories[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Product.localInventories: object expected");
-                                    message.localInventories[i] = $root.google.cloud.retail.v2beta.LocalInventory.fromObject(object.localInventories[i]);
+                                    message.localInventories[i] = $root.google.cloud.retail.v2beta.LocalInventory.fromObject(object.localInventories[i], long + 1);
                                 }
                             }
                             return message;
@@ -155115,8 +161777,11 @@
                             var keys2;
                             if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                 object.attributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributes, keys2[j]);
                                     object.attributes[keys2[j]] = $root.google.cloud.retail.v2beta.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                }
                             }
                             if (message.tags && message.tags.length) {
                                 object.tags = [];
@@ -155288,7 +161953,7 @@
                         function Promotion(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -155353,9 +162018,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Promotion.decode = function decode(reader, length, error) {
+                        Promotion.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Promotion();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -155367,7 +162036,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -155398,9 +162067,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Promotion.verify = function verify(message) {
+                        Promotion.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.promotionId != null && message.hasOwnProperty("promotionId"))
                                 if (!$util.isString(message.promotionId))
                                     return "promotionId: string expected";
@@ -155415,9 +162088,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Promotion} Promotion
                          */
-                        Promotion.fromObject = function fromObject(object) {
+                        Promotion.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Promotion)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Promotion();
                             if (object.promotionId != null)
                                 message.promotionId = String(object.promotionId);
@@ -155517,7 +162194,7 @@
                             this.pageCategories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -155788,9 +162465,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UserEvent.decode = function decode(reader, length, error) {
+                        UserEvent.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UserEvent(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -155810,7 +162491,7 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.eventTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.eventTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
@@ -155826,11 +162507,11 @@
                                 case 6: {
                                         if (!(message.productDetails && message.productDetails.length))
                                             message.productDetails = [];
-                                        message.productDetails.push($root.google.cloud.retail.v2beta.ProductDetail.decode(reader, reader.uint32()));
+                                        message.productDetails.push($root.google.cloud.retail.v2beta.ProductDetail.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 22: {
-                                        message.completionDetail = $root.google.cloud.retail.v2beta.CompletionDetail.decode(reader, reader.uint32());
+                                        message.completionDetail = $root.google.cloud.retail.v2beta.CompletionDetail.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -155846,13 +162527,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2beta.CustomAttribute.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2beta.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributes, key);
                                         message.attributes[key] = value;
                                         break;
                                     }
@@ -155861,7 +162544,7 @@
                                         break;
                                     }
                                 case 9: {
-                                        message.purchaseTransaction = $root.google.cloud.retail.v2beta.PurchaseTransaction.decode(reader, reader.uint32());
+                                        message.purchaseTransaction = $root.google.cloud.retail.v2beta.PurchaseTransaction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -155887,7 +162570,7 @@
                                         break;
                                     }
                                 case 12: {
-                                        message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.decode(reader, reader.uint32());
+                                        message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
@@ -155907,7 +162590,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -155938,9 +162621,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UserEvent.verify = function verify(message) {
+                        UserEvent.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.eventType != null && message.hasOwnProperty("eventType"))
                                 if (!$util.isString(message.eventType))
                                     return "eventType: string expected";
@@ -155951,7 +162638,7 @@
                                 if (!$util.isString(message.sessionId))
                                     return "sessionId: string expected";
                             if (message.eventTime != null && message.hasOwnProperty("eventTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.eventTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.eventTime, long + 1);
                                 if (error)
                                     return "eventTime." + error;
                             }
@@ -155969,13 +162656,13 @@
                                 if (!Array.isArray(message.productDetails))
                                     return "productDetails: array expected";
                                 for (var i = 0; i < message.productDetails.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.ProductDetail.verify(message.productDetails[i]);
+                                    var error = $root.google.cloud.retail.v2beta.ProductDetail.verify(message.productDetails[i], long + 1);
                                     if (error)
                                         return "productDetails." + error;
                                 }
                             }
                             if (message.completionDetail != null && message.hasOwnProperty("completionDetail")) {
-                                var error = $root.google.cloud.retail.v2beta.CompletionDetail.verify(message.completionDetail);
+                                var error = $root.google.cloud.retail.v2beta.CompletionDetail.verify(message.completionDetail, long + 1);
                                 if (error)
                                     return "completionDetail." + error;
                             }
@@ -155984,7 +162671,7 @@
                                     return "attributes: object expected";
                                 var key = Object.keys(message.attributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.CustomAttribute.verify(message.attributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2beta.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                     if (error)
                                         return "attributes." + error;
                                 }
@@ -155993,7 +162680,7 @@
                                 if (!$util.isString(message.cartId))
                                     return "cartId: string expected";
                             if (message.purchaseTransaction != null && message.hasOwnProperty("purchaseTransaction")) {
-                                var error = $root.google.cloud.retail.v2beta.PurchaseTransaction.verify(message.purchaseTransaction);
+                                var error = $root.google.cloud.retail.v2beta.PurchaseTransaction.verify(message.purchaseTransaction, long + 1);
                                 if (error)
                                     return "purchaseTransaction." + error;
                             }
@@ -156017,7 +162704,7 @@
                                         return "pageCategories: string[] expected";
                             }
                             if (message.userInfo != null && message.hasOwnProperty("userInfo")) {
-                                var error = $root.google.cloud.retail.v2beta.UserInfo.verify(message.userInfo);
+                                var error = $root.google.cloud.retail.v2beta.UserInfo.verify(message.userInfo, long + 1);
                                 if (error)
                                     return "userInfo." + error;
                             }
@@ -156044,9 +162731,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UserEvent} UserEvent
                          */
-                        UserEvent.fromObject = function fromObject(object) {
+                        UserEvent.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UserEvent)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UserEvent();
                             if (object.eventType != null)
                                 message.eventType = String(object.eventType);
@@ -156057,7 +162748,7 @@
                             if (object.eventTime != null) {
                                 if (typeof object.eventTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UserEvent.eventTime: object expected");
-                                message.eventTime = $root.google.protobuf.Timestamp.fromObject(object.eventTime);
+                                message.eventTime = $root.google.protobuf.Timestamp.fromObject(object.eventTime, long + 1);
                             }
                             if (object.experimentIds) {
                                 if (!Array.isArray(object.experimentIds))
@@ -156075,22 +162766,24 @@
                                 for (var i = 0; i < object.productDetails.length; ++i) {
                                     if (typeof object.productDetails[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.UserEvent.productDetails: object expected");
-                                    message.productDetails[i] = $root.google.cloud.retail.v2beta.ProductDetail.fromObject(object.productDetails[i]);
+                                    message.productDetails[i] = $root.google.cloud.retail.v2beta.ProductDetail.fromObject(object.productDetails[i], long + 1);
                                 }
                             }
                             if (object.completionDetail != null) {
                                 if (typeof object.completionDetail !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UserEvent.completionDetail: object expected");
-                                message.completionDetail = $root.google.cloud.retail.v2beta.CompletionDetail.fromObject(object.completionDetail);
+                                message.completionDetail = $root.google.cloud.retail.v2beta.CompletionDetail.fromObject(object.completionDetail, long + 1);
                             }
                             if (object.attributes) {
                                 if (typeof object.attributes !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UserEvent.attributes: object expected");
                                 message.attributes = {};
                                 for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributes, keys[i]);
                                     if (typeof object.attributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.UserEvent.attributes: object expected");
-                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2beta.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                    message.attributes[keys[i]] = $root.google.cloud.retail.v2beta.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                 }
                             }
                             if (object.cartId != null)
@@ -156098,7 +162791,7 @@
                             if (object.purchaseTransaction != null) {
                                 if (typeof object.purchaseTransaction !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UserEvent.purchaseTransaction: object expected");
-                                message.purchaseTransaction = $root.google.cloud.retail.v2beta.PurchaseTransaction.fromObject(object.purchaseTransaction);
+                                message.purchaseTransaction = $root.google.cloud.retail.v2beta.PurchaseTransaction.fromObject(object.purchaseTransaction, long + 1);
                             }
                             if (object.searchQuery != null)
                                 message.searchQuery = String(object.searchQuery);
@@ -156118,7 +162811,7 @@
                             if (object.userInfo != null) {
                                 if (typeof object.userInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UserEvent.userInfo: object expected");
-                                message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.fromObject(object.userInfo);
+                                message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.fromObject(object.userInfo, long + 1);
                             }
                             if (object.uri != null)
                                 message.uri = String(object.uri);
@@ -156191,8 +162884,11 @@
                             var keys2;
                             if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                 object.attributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributes, keys2[j]);
                                     object.attributes[keys2[j]] = $root.google.cloud.retail.v2beta.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                }
                             }
                             if (message.cartId != null && message.hasOwnProperty("cartId"))
                                 object.cartId = message.cartId;
@@ -156278,7 +162974,7 @@
                         function ProductDetail(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -156353,9 +163049,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductDetail.decode = function decode(reader, length, error) {
+                        ProductDetail.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ProductDetail();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -156363,15 +163063,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.product = $root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32());
+                                        message.product = $root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.quantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32());
+                                        message.quantity = $root.google.protobuf.Int32Value.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -156402,16 +163102,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductDetail.verify = function verify(message) {
+                        ProductDetail.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product")) {
-                                var error = $root.google.cloud.retail.v2beta.Product.verify(message.product);
+                                var error = $root.google.cloud.retail.v2beta.Product.verify(message.product, long + 1);
                                 if (error)
                                     return "product." + error;
                             }
                             if (message.quantity != null && message.hasOwnProperty("quantity")) {
-                                var error = $root.google.protobuf.Int32Value.verify(message.quantity);
+                                var error = $root.google.protobuf.Int32Value.verify(message.quantity, long + 1);
                                 if (error)
                                     return "quantity." + error;
                             }
@@ -156426,19 +163130,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ProductDetail} ProductDetail
                          */
-                        ProductDetail.fromObject = function fromObject(object) {
+                        ProductDetail.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ProductDetail)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ProductDetail();
                             if (object.product != null) {
                                 if (typeof object.product !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ProductDetail.product: object expected");
-                                message.product = $root.google.cloud.retail.v2beta.Product.fromObject(object.product);
+                                message.product = $root.google.cloud.retail.v2beta.Product.fromObject(object.product, long + 1);
                             }
                             if (object.quantity != null) {
                                 if (typeof object.quantity !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ProductDetail.quantity: object expected");
-                                message.quantity = $root.google.protobuf.Int32Value.fromObject(object.quantity);
+                                message.quantity = $root.google.protobuf.Int32Value.fromObject(object.quantity, long + 1);
                             }
                             return message;
                         };
@@ -156518,7 +163226,7 @@
                         function CompletionDetail(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -156603,9 +163311,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompletionDetail.decode = function decode(reader, length, error) {
+                        CompletionDetail.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CompletionDetail();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -156625,7 +163337,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -156656,9 +163368,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompletionDetail.verify = function verify(message) {
+                        CompletionDetail.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.completionAttributionToken != null && message.hasOwnProperty("completionAttributionToken"))
                                 if (!$util.isString(message.completionAttributionToken))
                                     return "completionAttributionToken: string expected";
@@ -156679,9 +163395,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CompletionDetail} CompletionDetail
                          */
-                        CompletionDetail.fromObject = function fromObject(object) {
+                        CompletionDetail.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CompletionDetail)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CompletionDetail();
                             if (object.completionAttributionToken != null)
                                 message.completionAttributionToken = String(object.completionAttributionToken);
@@ -156772,7 +163492,7 @@
                         function PurchaseTransaction(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -156877,9 +163597,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurchaseTransaction.decode = function decode(reader, length, error) {
+                        PurchaseTransaction.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PurchaseTransaction();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -156907,7 +163631,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -156938,9 +163662,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurchaseTransaction.verify = function verify(message) {
+                        PurchaseTransaction.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.id != null && message.hasOwnProperty("id"))
                                 if (!$util.isString(message.id))
                                     return "id: string expected";
@@ -156967,9 +163695,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PurchaseTransaction} PurchaseTransaction
                          */
-                        PurchaseTransaction.fromObject = function fromObject(object) {
+                        PurchaseTransaction.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PurchaseTransaction)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PurchaseTransaction();
                             if (object.id != null)
                                 message.id = String(object.id);
@@ -157499,7 +164231,7 @@
                         function ListCatalogsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -157584,9 +164316,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListCatalogsRequest.decode = function decode(reader, length, error) {
+                        ListCatalogsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListCatalogsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -157606,7 +164342,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -157637,9 +164373,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListCatalogsRequest.verify = function verify(message) {
+                        ListCatalogsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -157660,9 +164400,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListCatalogsRequest} ListCatalogsRequest
                          */
-                        ListCatalogsRequest.fromObject = function fromObject(object) {
+                        ListCatalogsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListCatalogsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListCatalogsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -157751,7 +164495,7 @@
                             this.catalogs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -157827,9 +164571,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListCatalogsResponse.decode = function decode(reader, length, error) {
+                        ListCatalogsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListCatalogsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -157839,7 +164587,7 @@
                                 case 1: {
                                         if (!(message.catalogs && message.catalogs.length))
                                             message.catalogs = [];
-                                        message.catalogs.push($root.google.cloud.retail.v2beta.Catalog.decode(reader, reader.uint32()));
+                                        message.catalogs.push($root.google.cloud.retail.v2beta.Catalog.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -157847,7 +164595,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -157878,14 +164626,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListCatalogsResponse.verify = function verify(message) {
+                        ListCatalogsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalogs != null && message.hasOwnProperty("catalogs")) {
                                 if (!Array.isArray(message.catalogs))
                                     return "catalogs: array expected";
                                 for (var i = 0; i < message.catalogs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Catalog.verify(message.catalogs[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Catalog.verify(message.catalogs[i], long + 1);
                                     if (error)
                                         return "catalogs." + error;
                                 }
@@ -157904,9 +164656,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListCatalogsResponse} ListCatalogsResponse
                          */
-                        ListCatalogsResponse.fromObject = function fromObject(object) {
+                        ListCatalogsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListCatalogsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListCatalogsResponse();
                             if (object.catalogs) {
                                 if (!Array.isArray(object.catalogs))
@@ -157915,7 +164671,7 @@
                                 for (var i = 0; i < object.catalogs.length; ++i) {
                                     if (typeof object.catalogs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ListCatalogsResponse.catalogs: object expected");
-                                    message.catalogs[i] = $root.google.cloud.retail.v2beta.Catalog.fromObject(object.catalogs[i]);
+                                    message.catalogs[i] = $root.google.cloud.retail.v2beta.Catalog.fromObject(object.catalogs[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -158000,7 +164756,7 @@
                         function UpdateCatalogRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -158075,9 +164831,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateCatalogRequest.decode = function decode(reader, length, error) {
+                        UpdateCatalogRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UpdateCatalogRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -158085,15 +164845,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.catalog = $root.google.cloud.retail.v2beta.Catalog.decode(reader, reader.uint32());
+                                        message.catalog = $root.google.cloud.retail.v2beta.Catalog.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -158124,16 +164884,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateCatalogRequest.verify = function verify(message) {
+                        UpdateCatalogRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog")) {
-                                var error = $root.google.cloud.retail.v2beta.Catalog.verify(message.catalog);
+                                var error = $root.google.cloud.retail.v2beta.Catalog.verify(message.catalog, long + 1);
                                 if (error)
                                     return "catalog." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -158148,19 +164912,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UpdateCatalogRequest} UpdateCatalogRequest
                          */
-                        UpdateCatalogRequest.fromObject = function fromObject(object) {
+                        UpdateCatalogRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UpdateCatalogRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UpdateCatalogRequest();
                             if (object.catalog != null) {
                                 if (typeof object.catalog !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateCatalogRequest.catalog: object expected");
-                                message.catalog = $root.google.cloud.retail.v2beta.Catalog.fromObject(object.catalog);
+                                message.catalog = $root.google.cloud.retail.v2beta.Catalog.fromObject(object.catalog, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateCatalogRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -158241,7 +165009,7 @@
                         function SetDefaultBranchRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -158336,9 +165104,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetDefaultBranchRequest.decode = function decode(reader, length, error) {
+                        SetDefaultBranchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SetDefaultBranchRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -158362,7 +165134,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -158393,9 +165165,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetDefaultBranchRequest.verify = function verify(message) {
+                        SetDefaultBranchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -158419,9 +165195,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.SetDefaultBranchRequest} SetDefaultBranchRequest
                          */
-                        SetDefaultBranchRequest.fromObject = function fromObject(object) {
+                        SetDefaultBranchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.SetDefaultBranchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.SetDefaultBranchRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -158513,7 +165293,7 @@
                         function GetDefaultBranchRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -158578,9 +165358,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetDefaultBranchRequest.decode = function decode(reader, length, error) {
+                        GetDefaultBranchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GetDefaultBranchRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -158592,7 +165376,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -158623,9 +165407,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetDefaultBranchRequest.verify = function verify(message) {
+                        GetDefaultBranchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -158640,9 +165428,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GetDefaultBranchRequest} GetDefaultBranchRequest
                          */
-                        GetDefaultBranchRequest.fromObject = function fromObject(object) {
+                        GetDefaultBranchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GetDefaultBranchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GetDefaultBranchRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -158720,7 +165512,7 @@
                         function GetDefaultBranchResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -158805,9 +165597,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetDefaultBranchResponse.decode = function decode(reader, length, error) {
+                        GetDefaultBranchResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GetDefaultBranchResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -158819,7 +165615,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -158827,7 +165623,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -158858,14 +165654,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetDefaultBranchResponse.verify = function verify(message) {
+                        GetDefaultBranchResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.branch != null && message.hasOwnProperty("branch"))
                                 if (!$util.isString(message.branch))
                                     return "branch: string expected";
                             if (message.setTime != null && message.hasOwnProperty("setTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.setTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.setTime, long + 1);
                                 if (error)
                                     return "setTime." + error;
                             }
@@ -158883,16 +165683,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GetDefaultBranchResponse} GetDefaultBranchResponse
                          */
-                        GetDefaultBranchResponse.fromObject = function fromObject(object) {
+                        GetDefaultBranchResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GetDefaultBranchResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GetDefaultBranchResponse();
                             if (object.branch != null)
                                 message.branch = String(object.branch);
                             if (object.setTime != null) {
                                 if (typeof object.setTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.GetDefaultBranchResponse.setTime: object expected");
-                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime);
+                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime, long + 1);
                             }
                             if (object.note != null)
                                 message.note = String(object.note);
@@ -158975,7 +165779,7 @@
                         function GetCompletionConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -159040,9 +165844,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetCompletionConfigRequest.decode = function decode(reader, length, error) {
+                        GetCompletionConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GetCompletionConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -159054,7 +165862,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -159085,9 +165893,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetCompletionConfigRequest.verify = function verify(message) {
+                        GetCompletionConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -159102,9 +165914,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GetCompletionConfigRequest} GetCompletionConfigRequest
                          */
-                        GetCompletionConfigRequest.fromObject = function fromObject(object) {
+                        GetCompletionConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GetCompletionConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GetCompletionConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -159181,7 +165997,7 @@
                         function UpdateCompletionConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -159256,9 +166072,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateCompletionConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateCompletionConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UpdateCompletionConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -159266,15 +166086,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.completionConfig = $root.google.cloud.retail.v2beta.CompletionConfig.decode(reader, reader.uint32());
+                                        message.completionConfig = $root.google.cloud.retail.v2beta.CompletionConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -159305,16 +166125,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateCompletionConfigRequest.verify = function verify(message) {
+                        UpdateCompletionConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.completionConfig != null && message.hasOwnProperty("completionConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.CompletionConfig.verify(message.completionConfig);
+                                var error = $root.google.cloud.retail.v2beta.CompletionConfig.verify(message.completionConfig, long + 1);
                                 if (error)
                                     return "completionConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -159329,19 +166153,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UpdateCompletionConfigRequest} UpdateCompletionConfigRequest
                          */
-                        UpdateCompletionConfigRequest.fromObject = function fromObject(object) {
+                        UpdateCompletionConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UpdateCompletionConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UpdateCompletionConfigRequest();
                             if (object.completionConfig != null) {
                                 if (typeof object.completionConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateCompletionConfigRequest.completionConfig: object expected");
-                                message.completionConfig = $root.google.cloud.retail.v2beta.CompletionConfig.fromObject(object.completionConfig);
+                                message.completionConfig = $root.google.cloud.retail.v2beta.CompletionConfig.fromObject(object.completionConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateCompletionConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -159419,7 +166247,7 @@
                         function GetAttributesConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -159484,9 +166312,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetAttributesConfigRequest.decode = function decode(reader, length, error) {
+                        GetAttributesConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GetAttributesConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -159498,7 +166330,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -159529,9 +166361,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetAttributesConfigRequest.verify = function verify(message) {
+                        GetAttributesConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -159546,9 +166382,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GetAttributesConfigRequest} GetAttributesConfigRequest
                          */
-                        GetAttributesConfigRequest.fromObject = function fromObject(object) {
+                        GetAttributesConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GetAttributesConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GetAttributesConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -159625,7 +166465,7 @@
                         function UpdateAttributesConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -159700,9 +166540,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateAttributesConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateAttributesConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UpdateAttributesConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -159710,15 +166554,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.attributesConfig = $root.google.cloud.retail.v2beta.AttributesConfig.decode(reader, reader.uint32());
+                                        message.attributesConfig = $root.google.cloud.retail.v2beta.AttributesConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -159749,16 +166593,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateAttributesConfigRequest.verify = function verify(message) {
+                        UpdateAttributesConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.AttributesConfig.verify(message.attributesConfig);
+                                var error = $root.google.cloud.retail.v2beta.AttributesConfig.verify(message.attributesConfig, long + 1);
                                 if (error)
                                     return "attributesConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -159773,19 +166621,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UpdateAttributesConfigRequest} UpdateAttributesConfigRequest
                          */
-                        UpdateAttributesConfigRequest.fromObject = function fromObject(object) {
+                        UpdateAttributesConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UpdateAttributesConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UpdateAttributesConfigRequest();
                             if (object.attributesConfig != null) {
                                 if (typeof object.attributesConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateAttributesConfigRequest.attributesConfig: object expected");
-                                message.attributesConfig = $root.google.cloud.retail.v2beta.AttributesConfig.fromObject(object.attributesConfig);
+                                message.attributesConfig = $root.google.cloud.retail.v2beta.AttributesConfig.fromObject(object.attributesConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateAttributesConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -159864,7 +166716,7 @@
                         function AddCatalogAttributeRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -159939,9 +166791,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddCatalogAttributeRequest.decode = function decode(reader, length, error) {
+                        AddCatalogAttributeRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AddCatalogAttributeRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -159953,11 +166809,11 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.catalogAttribute = $root.google.cloud.retail.v2beta.CatalogAttribute.decode(reader, reader.uint32());
+                                        message.catalogAttribute = $root.google.cloud.retail.v2beta.CatalogAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -159988,14 +166844,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddCatalogAttributeRequest.verify = function verify(message) {
+                        AddCatalogAttributeRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
                             if (message.catalogAttribute != null && message.hasOwnProperty("catalogAttribute")) {
-                                var error = $root.google.cloud.retail.v2beta.CatalogAttribute.verify(message.catalogAttribute);
+                                var error = $root.google.cloud.retail.v2beta.CatalogAttribute.verify(message.catalogAttribute, long + 1);
                                 if (error)
                                     return "catalogAttribute." + error;
                             }
@@ -160010,16 +166870,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.AddCatalogAttributeRequest} AddCatalogAttributeRequest
                          */
-                        AddCatalogAttributeRequest.fromObject = function fromObject(object) {
+                        AddCatalogAttributeRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.AddCatalogAttributeRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.AddCatalogAttributeRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
                             if (object.catalogAttribute != null) {
                                 if (typeof object.catalogAttribute !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.AddCatalogAttributeRequest.catalogAttribute: object expected");
-                                message.catalogAttribute = $root.google.cloud.retail.v2beta.CatalogAttribute.fromObject(object.catalogAttribute);
+                                message.catalogAttribute = $root.google.cloud.retail.v2beta.CatalogAttribute.fromObject(object.catalogAttribute, long + 1);
                             }
                             return message;
                         };
@@ -160098,7 +166962,7 @@
                         function RemoveCatalogAttributeRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -160173,9 +167037,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveCatalogAttributeRequest.decode = function decode(reader, length, error) {
+                        RemoveCatalogAttributeRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RemoveCatalogAttributeRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -160191,7 +167059,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -160222,9 +167090,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveCatalogAttributeRequest.verify = function verify(message) {
+                        RemoveCatalogAttributeRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
@@ -160242,9 +167114,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RemoveCatalogAttributeRequest} RemoveCatalogAttributeRequest
                          */
-                        RemoveCatalogAttributeRequest.fromObject = function fromObject(object) {
+                        RemoveCatalogAttributeRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RemoveCatalogAttributeRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.RemoveCatalogAttributeRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
@@ -160328,7 +167204,7 @@
                             this.attributeKeys = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -160404,9 +167280,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BatchRemoveCatalogAttributesRequest.decode = function decode(reader, length, error) {
+                        BatchRemoveCatalogAttributesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.BatchRemoveCatalogAttributesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -160424,7 +167304,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -160455,9 +167335,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BatchRemoveCatalogAttributesRequest.verify = function verify(message) {
+                        BatchRemoveCatalogAttributesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
@@ -160479,9 +167363,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.BatchRemoveCatalogAttributesRequest} BatchRemoveCatalogAttributesRequest
                          */
-                        BatchRemoveCatalogAttributesRequest.fromObject = function fromObject(object) {
+                        BatchRemoveCatalogAttributesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.BatchRemoveCatalogAttributesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.BatchRemoveCatalogAttributesRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
@@ -160574,7 +167462,7 @@
                             this.resetCatalogAttributes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -160651,9 +167539,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BatchRemoveCatalogAttributesResponse.decode = function decode(reader, length, error) {
+                        BatchRemoveCatalogAttributesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.BatchRemoveCatalogAttributesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -160673,7 +167565,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -160704,9 +167596,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BatchRemoveCatalogAttributesResponse.verify = function verify(message) {
+                        BatchRemoveCatalogAttributesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.deletedCatalogAttributes != null && message.hasOwnProperty("deletedCatalogAttributes")) {
                                 if (!Array.isArray(message.deletedCatalogAttributes))
                                     return "deletedCatalogAttributes: array expected";
@@ -160732,9 +167628,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.BatchRemoveCatalogAttributesResponse} BatchRemoveCatalogAttributesResponse
                          */
-                        BatchRemoveCatalogAttributesResponse.fromObject = function fromObject(object) {
+                        BatchRemoveCatalogAttributesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.BatchRemoveCatalogAttributesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.BatchRemoveCatalogAttributesResponse();
                             if (object.deletedCatalogAttributes) {
                                 if (!Array.isArray(object.deletedCatalogAttributes))
@@ -160834,7 +167734,7 @@
                         function ReplaceCatalogAttributeRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -160919,9 +167819,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ReplaceCatalogAttributeRequest.decode = function decode(reader, length, error) {
+                        ReplaceCatalogAttributeRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ReplaceCatalogAttributeRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -160933,15 +167837,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.catalogAttribute = $root.google.cloud.retail.v2beta.CatalogAttribute.decode(reader, reader.uint32());
+                                        message.catalogAttribute = $root.google.cloud.retail.v2beta.CatalogAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -160972,19 +167876,23 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ReplaceCatalogAttributeRequest.verify = function verify(message) {
+                        ReplaceCatalogAttributeRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.attributesConfig != null && message.hasOwnProperty("attributesConfig"))
                                 if (!$util.isString(message.attributesConfig))
                                     return "attributesConfig: string expected";
                             if (message.catalogAttribute != null && message.hasOwnProperty("catalogAttribute")) {
-                                var error = $root.google.cloud.retail.v2beta.CatalogAttribute.verify(message.catalogAttribute);
+                                var error = $root.google.cloud.retail.v2beta.CatalogAttribute.verify(message.catalogAttribute, long + 1);
                                 if (error)
                                     return "catalogAttribute." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -160999,21 +167907,25 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ReplaceCatalogAttributeRequest} ReplaceCatalogAttributeRequest
                          */
-                        ReplaceCatalogAttributeRequest.fromObject = function fromObject(object) {
+                        ReplaceCatalogAttributeRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ReplaceCatalogAttributeRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ReplaceCatalogAttributeRequest();
                             if (object.attributesConfig != null)
                                 message.attributesConfig = String(object.attributesConfig);
                             if (object.catalogAttribute != null) {
                                 if (typeof object.catalogAttribute !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ReplaceCatalogAttributeRequest.catalogAttribute: object expected");
-                                message.catalogAttribute = $root.google.cloud.retail.v2beta.CatalogAttribute.fromObject(object.catalogAttribute);
+                                message.catalogAttribute = $root.google.cloud.retail.v2beta.CatalogAttribute.fromObject(object.catalogAttribute, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ReplaceCatalogAttributeRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -161204,7 +168116,7 @@
                             this.languageCodes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -161350,9 +168262,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompleteQueryRequest.decode = function decode(reader, length, error) {
+                        CompleteQueryRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CompleteQueryRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -161398,7 +168314,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -161429,9 +168345,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompleteQueryRequest.verify = function verify(message) {
+                        CompleteQueryRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -161474,9 +168394,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CompleteQueryRequest} CompleteQueryRequest
                          */
-                        CompleteQueryRequest.fromObject = function fromObject(object) {
+                        CompleteQueryRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CompleteQueryRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CompleteQueryRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -161608,7 +168532,7 @@
                             this.attributeResults = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -161708,9 +168632,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CompleteQueryResponse.decode = function decode(reader, length, error) {
+                        CompleteQueryResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CompleteQueryResponse(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -161720,7 +168648,7 @@
                                 case 1: {
                                         if (!(message.completionResults && message.completionResults.length))
                                             message.completionResults = [];
-                                        message.completionResults.push($root.google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult.decode(reader, reader.uint32()));
+                                        message.completionResults.push($root.google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -161730,7 +168658,7 @@
                                 case 3: {
                                         if (!(message.recentSearchResults && message.recentSearchResults.length))
                                             message.recentSearchResults = [];
-                                        message.recentSearchResults.push($root.google.cloud.retail.v2beta.CompleteQueryResponse.RecentSearchResult.decode(reader, reader.uint32()));
+                                        message.recentSearchResults.push($root.google.cloud.retail.v2beta.CompleteQueryResponse.RecentSearchResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 4: {
@@ -161746,18 +168674,20 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.attributeResults, key);
                                         message.attributeResults[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -161788,14 +168718,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CompleteQueryResponse.verify = function verify(message) {
+                        CompleteQueryResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.completionResults != null && message.hasOwnProperty("completionResults")) {
                                 if (!Array.isArray(message.completionResults))
                                     return "completionResults: array expected";
                                 for (var i = 0; i < message.completionResults.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult.verify(message.completionResults[i]);
+                                    var error = $root.google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult.verify(message.completionResults[i], long + 1);
                                     if (error)
                                         return "completionResults." + error;
                                 }
@@ -161807,7 +168741,7 @@
                                 if (!Array.isArray(message.recentSearchResults))
                                     return "recentSearchResults: array expected";
                                 for (var i = 0; i < message.recentSearchResults.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.CompleteQueryResponse.RecentSearchResult.verify(message.recentSearchResults[i]);
+                                    var error = $root.google.cloud.retail.v2beta.CompleteQueryResponse.RecentSearchResult.verify(message.recentSearchResults[i], long + 1);
                                     if (error)
                                         return "recentSearchResults." + error;
                                 }
@@ -161817,7 +168751,7 @@
                                     return "attributeResults: object expected";
                                 var key = Object.keys(message.attributeResults);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult.verify(message.attributeResults[key[i]]);
+                                    var error = $root.google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult.verify(message.attributeResults[key[i]], long + 1);
                                     if (error)
                                         return "attributeResults." + error;
                                 }
@@ -161833,9 +168767,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CompleteQueryResponse} CompleteQueryResponse
                          */
-                        CompleteQueryResponse.fromObject = function fromObject(object) {
+                        CompleteQueryResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CompleteQueryResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CompleteQueryResponse();
                             if (object.completionResults) {
                                 if (!Array.isArray(object.completionResults))
@@ -161844,7 +168782,7 @@
                                 for (var i = 0; i < object.completionResults.length; ++i) {
                                     if (typeof object.completionResults[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.CompleteQueryResponse.completionResults: object expected");
-                                    message.completionResults[i] = $root.google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult.fromObject(object.completionResults[i]);
+                                    message.completionResults[i] = $root.google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult.fromObject(object.completionResults[i], long + 1);
                                 }
                             }
                             if (object.attributionToken != null)
@@ -161856,7 +168794,7 @@
                                 for (var i = 0; i < object.recentSearchResults.length; ++i) {
                                     if (typeof object.recentSearchResults[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.CompleteQueryResponse.recentSearchResults: object expected");
-                                    message.recentSearchResults[i] = $root.google.cloud.retail.v2beta.CompleteQueryResponse.RecentSearchResult.fromObject(object.recentSearchResults[i]);
+                                    message.recentSearchResults[i] = $root.google.cloud.retail.v2beta.CompleteQueryResponse.RecentSearchResult.fromObject(object.recentSearchResults[i], long + 1);
                                 }
                             }
                             if (object.attributeResults) {
@@ -161864,9 +168802,11 @@
                                     throw TypeError(".google.cloud.retail.v2beta.CompleteQueryResponse.attributeResults: object expected");
                                 message.attributeResults = {};
                                 for (var keys = Object.keys(object.attributeResults), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.attributeResults, keys[i]);
                                     if (typeof object.attributeResults[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.CompleteQueryResponse.attributeResults: object expected");
-                                    message.attributeResults[keys[i]] = $root.google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult.fromObject(object.attributeResults[keys[i]]);
+                                    message.attributeResults[keys[i]] = $root.google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult.fromObject(object.attributeResults[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -161908,8 +168848,11 @@
                             var keys2;
                             if (message.attributeResults && (keys2 = Object.keys(message.attributeResults)).length) {
                                 object.attributeResults = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.attributeResults, keys2[j]);
                                     object.attributeResults[keys2[j]] = $root.google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult.toObject(message.attributeResults[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -161962,7 +168905,7 @@
                                 this.attributes = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -162040,9 +168983,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            CompletionResult.decode = function decode(reader, length, error) {
+                            CompletionResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -162066,18 +169013,20 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.cloud.retail.v2beta.CustomAttribute.decode(reader, reader.uint32());
+                                                    value = $root.google.cloud.retail.v2beta.CustomAttribute.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.attributes, key);
                                             message.attributes[key] = value;
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -162108,9 +169057,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            CompletionResult.verify = function verify(message) {
+                            CompletionResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.suggestion != null && message.hasOwnProperty("suggestion"))
                                     if (!$util.isString(message.suggestion))
                                         return "suggestion: string expected";
@@ -162119,7 +169072,7 @@
                                         return "attributes: object expected";
                                     var key = Object.keys(message.attributes);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.CustomAttribute.verify(message.attributes[key[i]]);
+                                        var error = $root.google.cloud.retail.v2beta.CustomAttribute.verify(message.attributes[key[i]], long + 1);
                                         if (error)
                                             return "attributes." + error;
                                     }
@@ -162135,9 +169088,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult} CompletionResult
                              */
-                            CompletionResult.fromObject = function fromObject(object) {
+                            CompletionResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult();
                                 if (object.suggestion != null)
                                     message.suggestion = String(object.suggestion);
@@ -162146,9 +169103,11 @@
                                         throw TypeError(".google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult.attributes: object expected");
                                     message.attributes = {};
                                     for (var keys = Object.keys(object.attributes), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.attributes, keys[i]);
                                         if (typeof object.attributes[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.CompleteQueryResponse.CompletionResult.attributes: object expected");
-                                        message.attributes[keys[i]] = $root.google.cloud.retail.v2beta.CustomAttribute.fromObject(object.attributes[keys[i]]);
+                                        message.attributes[keys[i]] = $root.google.cloud.retail.v2beta.CustomAttribute.fromObject(object.attributes[keys[i]], long + 1);
                                     }
                                 }
                                 return message;
@@ -162176,8 +169135,11 @@
                                 var keys2;
                                 if (message.attributes && (keys2 = Object.keys(message.attributes)).length) {
                                     object.attributes = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.attributes, keys2[j]);
                                         object.attributes[keys2[j]] = $root.google.cloud.retail.v2beta.CustomAttribute.toObject(message.attributes[keys2[j]], options);
+                                    }
                                 }
                                 return object;
                             };
@@ -162231,7 +169193,7 @@
                             function RecentSearchResult(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -162296,9 +169258,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RecentSearchResult.decode = function decode(reader, length, error) {
+                            RecentSearchResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CompleteQueryResponse.RecentSearchResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -162310,7 +169276,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -162341,9 +169307,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RecentSearchResult.verify = function verify(message) {
+                            RecentSearchResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.recentSearch != null && message.hasOwnProperty("recentSearch"))
                                     if (!$util.isString(message.recentSearch))
                                         return "recentSearch: string expected";
@@ -162358,9 +169328,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.CompleteQueryResponse.RecentSearchResult} RecentSearchResult
                              */
-                            RecentSearchResult.fromObject = function fromObject(object) {
+                            RecentSearchResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.CompleteQueryResponse.RecentSearchResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.CompleteQueryResponse.RecentSearchResult();
                                 if (object.recentSearch != null)
                                     message.recentSearch = String(object.recentSearch);
@@ -162437,7 +169411,7 @@
                                 this.suggestions = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -162503,9 +169477,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            AttributeResult.decode = function decode(reader, length, error) {
+                            AttributeResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -162519,7 +169497,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -162550,9 +169528,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            AttributeResult.verify = function verify(message) {
+                            AttributeResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.suggestions != null && message.hasOwnProperty("suggestions")) {
                                     if (!Array.isArray(message.suggestions))
                                         return "suggestions: array expected";
@@ -162571,9 +169553,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult} AttributeResult
                              */
-                            AttributeResult.fromObject = function fromObject(object) {
+                            AttributeResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.CompleteQueryResponse.AttributeResult();
                                 if (object.suggestions) {
                                     if (!Array.isArray(object.suggestions))
@@ -162669,7 +169655,7 @@
                             this.searchSolutionUseCase = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -162817,9 +169803,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Control.decode = function decode(reader, length, error) {
+                        Control.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Control();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -162827,11 +169817,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 3: {
-                                        message.facetSpec = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.decode(reader, reader.uint32());
+                                        message.facetSpec = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.rule = $root.google.cloud.retail.v2beta.Rule.decode(reader, reader.uint32());
+                                        message.rule = $root.google.cloud.retail.v2beta.Rule.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
@@ -162871,7 +169861,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -162902,14 +169892,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Control.verify = function verify(message) {
+                        Control.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.facetSpec != null && message.hasOwnProperty("facetSpec")) {
                                 properties.control = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.verify(message.facetSpec);
+                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.verify(message.facetSpec, long + 1);
                                     if (error)
                                         return "facetSpec." + error;
                                 }
@@ -162919,7 +169913,7 @@
                                     return "control: multiple values";
                                 properties.control = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.Rule.verify(message.rule);
+                                    var error = $root.google.cloud.retail.v2beta.Rule.verify(message.rule, long + 1);
                                     if (error)
                                         return "rule." + error;
                                 }
@@ -162974,19 +169968,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Control} Control
                          */
-                        Control.fromObject = function fromObject(object) {
+                        Control.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Control)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Control();
                             if (object.facetSpec != null) {
                                 if (typeof object.facetSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Control.facetSpec: object expected");
-                                message.facetSpec = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.fromObject(object.facetSpec);
+                                message.facetSpec = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.fromObject(object.facetSpec, long + 1);
                             }
                             if (object.rule != null) {
                                 if (typeof object.rule !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Control.rule: object expected");
-                                message.rule = $root.google.cloud.retail.v2beta.Rule.fromObject(object.rule);
+                                message.rule = $root.google.cloud.retail.v2beta.Rule.fromObject(object.rule, long + 1);
                             }
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -163224,7 +170222,7 @@
                         function ProductAttributeValue(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -163299,9 +170297,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductAttributeValue.decode = function decode(reader, length, error) {
+                        ProductAttributeValue.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ProductAttributeValue();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -163317,7 +170319,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -163348,9 +170350,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductAttributeValue.verify = function verify(message) {
+                        ProductAttributeValue.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -163368,9 +170374,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ProductAttributeValue} ProductAttributeValue
                          */
-                        ProductAttributeValue.fromObject = function fromObject(object) {
+                        ProductAttributeValue.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ProductAttributeValue)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ProductAttributeValue();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -163453,7 +170463,7 @@
                         function ProductAttributeInterval(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -163528,9 +170538,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ProductAttributeInterval.decode = function decode(reader, length, error) {
+                        ProductAttributeInterval.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ProductAttributeInterval();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -163542,11 +170556,11 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.interval = $root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32());
+                                        message.interval = $root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -163577,14 +170591,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ProductAttributeInterval.verify = function verify(message) {
+                        ProductAttributeInterval.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
                             if (message.interval != null && message.hasOwnProperty("interval")) {
-                                var error = $root.google.cloud.retail.v2beta.Interval.verify(message.interval);
+                                var error = $root.google.cloud.retail.v2beta.Interval.verify(message.interval, long + 1);
                                 if (error)
                                     return "interval." + error;
                             }
@@ -163599,16 +170617,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ProductAttributeInterval} ProductAttributeInterval
                          */
-                        ProductAttributeInterval.fromObject = function fromObject(object) {
+                        ProductAttributeInterval.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ProductAttributeInterval)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ProductAttributeInterval();
                             if (object.name != null)
                                 message.name = String(object.name);
                             if (object.interval != null) {
                                 if (typeof object.interval !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ProductAttributeInterval.interval: object expected");
-                                message.interval = $root.google.cloud.retail.v2beta.Interval.fromObject(object.interval);
+                                message.interval = $root.google.cloud.retail.v2beta.Interval.fromObject(object.interval, long + 1);
                             }
                             return message;
                         };
@@ -163688,7 +170710,7 @@
                         function Tile(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -163787,9 +170809,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Tile.decode = function decode(reader, length, error) {
+                        Tile.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Tile();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -163797,11 +170823,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32());
+                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.productAttributeInterval = $root.google.cloud.retail.v2beta.ProductAttributeInterval.decode(reader, reader.uint32());
+                                        message.productAttributeInterval = $root.google.cloud.retail.v2beta.ProductAttributeInterval.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -163809,7 +170835,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -163840,14 +170866,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Tile.verify = function verify(message) {
+                        Tile.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
                                 properties.productAttribute = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue);
+                                    var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                     if (error)
                                         return "productAttributeValue." + error;
                                 }
@@ -163857,7 +170887,7 @@
                                     return "productAttribute: multiple values";
                                 properties.productAttribute = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.ProductAttributeInterval.verify(message.productAttributeInterval);
+                                    var error = $root.google.cloud.retail.v2beta.ProductAttributeInterval.verify(message.productAttributeInterval, long + 1);
                                     if (error)
                                         return "productAttributeInterval." + error;
                                 }
@@ -163876,19 +170906,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Tile} Tile
                          */
-                        Tile.fromObject = function fromObject(object) {
+                        Tile.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Tile)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Tile();
                             if (object.productAttributeValue != null) {
                                 if (typeof object.productAttributeValue !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Tile.productAttributeValue: object expected");
-                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                             }
                             if (object.productAttributeInterval != null) {
                                 if (typeof object.productAttributeInterval !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Tile.productAttributeInterval: object expected");
-                                message.productAttributeInterval = $root.google.cloud.retail.v2beta.ProductAttributeInterval.fromObject(object.productAttributeInterval);
+                                message.productAttributeInterval = $root.google.cloud.retail.v2beta.ProductAttributeInterval.fromObject(object.productAttributeInterval, long + 1);
                             }
                             if (object.representativeProductId != null)
                                 message.representativeProductId = String(object.representativeProductId);
@@ -164006,7 +171040,7 @@
                             this.userAttributes = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -164357,9 +171391,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchRequest.decode = function decode(reader, length, error) {
+                        SearchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -164383,7 +171421,7 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.decode(reader, reader.uint32());
+                                        message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -164413,19 +171451,19 @@
                                 case 12: {
                                         if (!(message.facetSpecs && message.facetSpecs.length))
                                             message.facetSpecs = [];
-                                        message.facetSpecs.push($root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.decode(reader, reader.uint32()));
+                                        message.facetSpecs.push($root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 21: {
-                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32());
+                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
-                                        message.boostSpec = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.decode(reader, reader.uint32());
+                                        message.boostSpec = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
-                                        message.queryExpansionSpec = $root.google.cloud.retail.v2beta.SearchRequest.QueryExpansionSpec.decode(reader, reader.uint32());
+                                        message.queryExpansionSpec = $root.google.cloud.retail.v2beta.SearchRequest.QueryExpansionSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 17: {
@@ -164445,7 +171483,7 @@
                                         break;
                                     }
                                 case 32: {
-                                        message.personalizationSpec = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32());
+                                        message.personalizationSpec = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 34: {
@@ -164464,15 +171502,17 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
                                 case 35: {
-                                        message.spellCorrectionSpec = $root.google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec.decode(reader, reader.uint32());
+                                        message.spellCorrectionSpec = $root.google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 38: {
@@ -164480,11 +171520,11 @@
                                         break;
                                     }
                                 case 40: {
-                                        message.conversationalSearchSpec = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.decode(reader, reader.uint32());
+                                        message.conversationalSearchSpec = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 41: {
-                                        message.tileNavigationSpec = $root.google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec.decode(reader, reader.uint32());
+                                        message.tileNavigationSpec = $root.google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 43: {
@@ -164512,18 +171552,20 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.cloud.retail.v2beta.StringList.decode(reader, reader.uint32());
+                                                value = $root.google.cloud.retail.v2beta.StringList.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.userAttributes, key);
                                         message.userAttributes[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -164554,9 +171596,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchRequest.verify = function verify(message) {
+                        SearchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.placement != null && message.hasOwnProperty("placement"))
                                 if (!$util.isString(message.placement))
@@ -164571,7 +171617,7 @@
                                 if (!$util.isString(message.visitorId))
                                     return "visitorId: string expected";
                             if (message.userInfo != null && message.hasOwnProperty("userInfo")) {
-                                var error = $root.google.cloud.retail.v2beta.UserInfo.verify(message.userInfo);
+                                var error = $root.google.cloud.retail.v2beta.UserInfo.verify(message.userInfo, long + 1);
                                 if (error)
                                     return "userInfo." + error;
                             }
@@ -164597,23 +171643,23 @@
                                 if (!Array.isArray(message.facetSpecs))
                                     return "facetSpecs: array expected";
                                 for (var i = 0; i < message.facetSpecs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.verify(message.facetSpecs[i]);
+                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.verify(message.facetSpecs[i], long + 1);
                                     if (error)
                                         return "facetSpecs." + error;
                                 }
                             }
                             if (message.dynamicFacetSpec != null && message.hasOwnProperty("dynamicFacetSpec")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec);
+                                var error = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec, long + 1);
                                 if (error)
                                     return "dynamicFacetSpec." + error;
                             }
                             if (message.boostSpec != null && message.hasOwnProperty("boostSpec")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.verify(message.boostSpec);
+                                var error = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.verify(message.boostSpec, long + 1);
                                 if (error)
                                     return "boostSpec." + error;
                             }
                             if (message.queryExpansionSpec != null && message.hasOwnProperty("queryExpansionSpec")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchRequest.QueryExpansionSpec.verify(message.queryExpansionSpec);
+                                var error = $root.google.cloud.retail.v2beta.SearchRequest.QueryExpansionSpec.verify(message.queryExpansionSpec, long + 1);
                                 if (error)
                                     return "queryExpansionSpec." + error;
                             }
@@ -164641,7 +171687,7 @@
                                     break;
                                 }
                             if (message.personalizationSpec != null && message.hasOwnProperty("personalizationSpec")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec);
+                                var error = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec, long + 1);
                                 if (error)
                                     return "personalizationSpec." + error;
                             }
@@ -164656,7 +171702,7 @@
                             if (message.spellCorrectionSpec != null && message.hasOwnProperty("spellCorrectionSpec")) {
                                 properties._spellCorrectionSpec = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec.verify(message.spellCorrectionSpec);
+                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec.verify(message.spellCorrectionSpec, long + 1);
                                     if (error)
                                         return "spellCorrectionSpec." + error;
                                 }
@@ -164665,12 +171711,12 @@
                                 if (!$util.isString(message.entity))
                                     return "entity: string expected";
                             if (message.conversationalSearchSpec != null && message.hasOwnProperty("conversationalSearchSpec")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.verify(message.conversationalSearchSpec);
+                                var error = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.verify(message.conversationalSearchSpec, long + 1);
                                 if (error)
                                     return "conversationalSearchSpec." + error;
                             }
                             if (message.tileNavigationSpec != null && message.hasOwnProperty("tileNavigationSpec")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec.verify(message.tileNavigationSpec);
+                                var error = $root.google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec.verify(message.tileNavigationSpec, long + 1);
                                 if (error)
                                     return "tileNavigationSpec." + error;
                             }
@@ -164688,7 +171734,7 @@
                                     return "userAttributes: object expected";
                                 var key = Object.keys(message.userAttributes);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.StringList.verify(message.userAttributes[key[i]]);
+                                    var error = $root.google.cloud.retail.v2beta.StringList.verify(message.userAttributes[key[i]], long + 1);
                                     if (error)
                                         return "userAttributes." + error;
                                 }
@@ -164704,9 +171750,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.SearchRequest} SearchRequest
                          */
-                        SearchRequest.fromObject = function fromObject(object) {
+                        SearchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.SearchRequest();
                             if (object.placement != null)
                                 message.placement = String(object.placement);
@@ -164719,7 +171769,7 @@
                             if (object.userInfo != null) {
                                 if (typeof object.userInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.userInfo: object expected");
-                                message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.fromObject(object.userInfo);
+                                message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.fromObject(object.userInfo, long + 1);
                             }
                             if (object.pageSize != null)
                                 message.pageSize = object.pageSize | 0;
@@ -164740,23 +171790,23 @@
                                 for (var i = 0; i < object.facetSpecs.length; ++i) {
                                     if (typeof object.facetSpecs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.SearchRequest.facetSpecs: object expected");
-                                    message.facetSpecs[i] = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.fromObject(object.facetSpecs[i]);
+                                    message.facetSpecs[i] = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.fromObject(object.facetSpecs[i], long + 1);
                                 }
                             }
                             if (object.dynamicFacetSpec != null) {
                                 if (typeof object.dynamicFacetSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.dynamicFacetSpec: object expected");
-                                message.dynamicFacetSpec = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec);
+                                message.dynamicFacetSpec = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec, long + 1);
                             }
                             if (object.boostSpec != null) {
                                 if (typeof object.boostSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.boostSpec: object expected");
-                                message.boostSpec = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.fromObject(object.boostSpec);
+                                message.boostSpec = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.fromObject(object.boostSpec, long + 1);
                             }
                             if (object.queryExpansionSpec != null) {
                                 if (typeof object.queryExpansionSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.queryExpansionSpec: object expected");
-                                message.queryExpansionSpec = $root.google.cloud.retail.v2beta.SearchRequest.QueryExpansionSpec.fromObject(object.queryExpansionSpec);
+                                message.queryExpansionSpec = $root.google.cloud.retail.v2beta.SearchRequest.QueryExpansionSpec.fromObject(object.queryExpansionSpec, long + 1);
                             }
                             if (object.variantRollupKeys) {
                                 if (!Array.isArray(object.variantRollupKeys))
@@ -164795,31 +171845,34 @@
                             if (object.personalizationSpec != null) {
                                 if (typeof object.personalizationSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.personalizationSpec: object expected");
-                                message.personalizationSpec = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec);
+                                message.personalizationSpec = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec, long + 1);
                             }
                             if (object.labels) {
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.spellCorrectionSpec != null) {
                                 if (typeof object.spellCorrectionSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.spellCorrectionSpec: object expected");
-                                message.spellCorrectionSpec = $root.google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec.fromObject(object.spellCorrectionSpec);
+                                message.spellCorrectionSpec = $root.google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec.fromObject(object.spellCorrectionSpec, long + 1);
                             }
                             if (object.entity != null)
                                 message.entity = String(object.entity);
                             if (object.conversationalSearchSpec != null) {
                                 if (typeof object.conversationalSearchSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.conversationalSearchSpec: object expected");
-                                message.conversationalSearchSpec = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.fromObject(object.conversationalSearchSpec);
+                                message.conversationalSearchSpec = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.fromObject(object.conversationalSearchSpec, long + 1);
                             }
                             if (object.tileNavigationSpec != null) {
                                 if (typeof object.tileNavigationSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.tileNavigationSpec: object expected");
-                                message.tileNavigationSpec = $root.google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec.fromObject(object.tileNavigationSpec);
+                                message.tileNavigationSpec = $root.google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec.fromObject(object.tileNavigationSpec, long + 1);
                             }
                             if (object.languageCode != null)
                                 message.languageCode = String(object.languageCode);
@@ -164832,9 +171885,11 @@
                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.userAttributes: object expected");
                                 message.userAttributes = {};
                                 for (var keys = Object.keys(object.userAttributes), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.userAttributes, keys[i]);
                                     if (typeof object.userAttributes[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.SearchRequest.userAttributes: object expected");
-                                    message.userAttributes[keys[i]] = $root.google.cloud.retail.v2beta.StringList.fromObject(object.userAttributes[keys[i]]);
+                                    message.userAttributes[keys[i]] = $root.google.cloud.retail.v2beta.StringList.fromObject(object.userAttributes[keys[i]], long + 1);
                                 }
                             }
                             return message;
@@ -164936,8 +171991,11 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.spellCorrectionSpec != null && message.hasOwnProperty("spellCorrectionSpec")) {
                                 object.spellCorrectionSpec = $root.google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec.toObject(message.spellCorrectionSpec, options);
@@ -164958,8 +172016,11 @@
                                 object.placeId = message.placeId;
                             if (message.userAttributes && (keys2 = Object.keys(message.userAttributes)).length) {
                                 object.userAttributes = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.userAttributes, keys2[j]);
                                     object.userAttributes[keys2[j]] = $root.google.cloud.retail.v2beta.StringList.toObject(message.userAttributes[keys2[j]], options);
+                                }
                             }
                             return object;
                         };
@@ -165014,7 +172075,7 @@
                                 this.excludedFilterKeys = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -165110,9 +172171,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FacetSpec.decode = function decode(reader, length, error) {
+                            FacetSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -165120,7 +172185,7 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.facetKey = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey.decode(reader, reader.uint32());
+                                            message.facetKey = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
@@ -165138,7 +172203,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -165169,11 +172234,15 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FacetSpec.verify = function verify(message) {
+                            FacetSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.facetKey != null && message.hasOwnProperty("facetKey")) {
-                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey.verify(message.facetKey);
+                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey.verify(message.facetKey, long + 1);
                                     if (error)
                                         return "facetKey." + error;
                                 }
@@ -165201,14 +172270,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchRequest.FacetSpec} FacetSpec
                              */
-                            FacetSpec.fromObject = function fromObject(object) {
+                            FacetSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec();
                                 if (object.facetKey != null) {
                                     if (typeof object.facetKey !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.SearchRequest.FacetSpec.facetKey: object expected");
-                                    message.facetKey = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey.fromObject(object.facetKey);
+                                    message.facetKey = $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey.fromObject(object.facetKey, long + 1);
                                 }
                                 if (object.limit != null)
                                     message.limit = object.limit | 0;
@@ -165316,7 +172389,7 @@
                                     this.contains = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -165465,9 +172538,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FacetKey.decode = function decode(reader, length, error) {
+                                FacetKey.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -165481,7 +172558,7 @@
                                         case 2: {
                                                 if (!(message.intervals && message.intervals.length))
                                                     message.intervals = [];
-                                                message.intervals.push($root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32()));
+                                                message.intervals.push($root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         case 3: {
@@ -165519,7 +172596,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -165550,9 +172627,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FacetKey.verify = function verify(message) {
+                                FacetKey.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.key != null && message.hasOwnProperty("key"))
                                         if (!$util.isString(message.key))
                                             return "key: string expected";
@@ -165560,7 +172641,7 @@
                                         if (!Array.isArray(message.intervals))
                                             return "intervals: array expected";
                                         for (var i = 0; i < message.intervals.length; ++i) {
-                                            var error = $root.google.cloud.retail.v2beta.Interval.verify(message.intervals[i]);
+                                            var error = $root.google.cloud.retail.v2beta.Interval.verify(message.intervals[i], long + 1);
                                             if (error)
                                                 return "intervals." + error;
                                         }
@@ -165609,9 +172690,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey} FacetKey
                                  */
-                                FacetKey.fromObject = function fromObject(object) {
+                                FacetKey.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey();
                                     if (object.key != null)
                                         message.key = String(object.key);
@@ -165622,7 +172707,7 @@
                                         for (var i = 0; i < object.intervals.length; ++i) {
                                             if (typeof object.intervals[i] !== "object")
                                                 throw TypeError(".google.cloud.retail.v2beta.SearchRequest.FacetSpec.FacetKey.intervals: object expected");
-                                            message.intervals[i] = $root.google.cloud.retail.v2beta.Interval.fromObject(object.intervals[i]);
+                                            message.intervals[i] = $root.google.cloud.retail.v2beta.Interval.fromObject(object.intervals[i], long + 1);
                                         }
                                     }
                                     if (object.restrictedValues) {
@@ -165768,7 +172853,7 @@
                             function DynamicFacetSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -165833,9 +172918,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DynamicFacetSpec.decode = function decode(reader, length, error) {
+                            DynamicFacetSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -165847,7 +172936,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -165878,9 +172967,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DynamicFacetSpec.verify = function verify(message) {
+                            DynamicFacetSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -165901,9 +172994,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec} DynamicFacetSpec
                              */
-                            DynamicFacetSpec.fromObject = function fromObject(object) {
+                            DynamicFacetSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec();
                                 switch (object.mode) {
                                 default:
@@ -166015,7 +173112,7 @@
                                 this.conditionBoostSpecs = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -166100,9 +173197,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BoostSpec.decode = function decode(reader, length, error) {
+                            BoostSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -166112,7 +173213,7 @@
                                     case 1: {
                                             if (!(message.conditionBoostSpecs && message.conditionBoostSpecs.length))
                                                 message.conditionBoostSpecs = [];
-                                            message.conditionBoostSpecs.push($root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32()));
+                                            message.conditionBoostSpecs.push($root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
@@ -166120,7 +173221,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -166151,15 +173252,19 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BoostSpec.verify = function verify(message) {
+                            BoostSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.conditionBoostSpecs != null && message.hasOwnProperty("conditionBoostSpecs")) {
                                     if (!Array.isArray(message.conditionBoostSpecs))
                                         return "conditionBoostSpecs: array expected";
                                     for (var i = 0; i < message.conditionBoostSpecs.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.conditionBoostSpecs[i]);
+                                        var error = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.conditionBoostSpecs[i], long + 1);
                                         if (error)
                                             return "conditionBoostSpecs." + error;
                                     }
@@ -166180,9 +173285,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchRequest.BoostSpec} BoostSpec
                              */
-                            BoostSpec.fromObject = function fromObject(object) {
+                            BoostSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec();
                                 if (object.conditionBoostSpecs) {
                                     if (!Array.isArray(object.conditionBoostSpecs))
@@ -166191,7 +173300,7 @@
                                     for (var i = 0; i < object.conditionBoostSpecs.length; ++i) {
                                         if (typeof object.conditionBoostSpecs[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchRequest.BoostSpec.conditionBoostSpecs: object expected");
-                                        message.conditionBoostSpecs[i] = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.conditionBoostSpecs[i]);
+                                        message.conditionBoostSpecs[i] = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.conditionBoostSpecs[i], long + 1);
                                     }
                                 }
                                 if (object.skipBoostSpecValidation != null)
@@ -166274,7 +173383,7 @@
                                 function ConditionBoostSpec(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -166349,9 +173458,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                ConditionBoostSpec.decode = function decode(reader, length, error) {
+                                ConditionBoostSpec.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -166367,7 +173480,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -166398,9 +173511,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                ConditionBoostSpec.verify = function verify(message) {
+                                ConditionBoostSpec.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.condition != null && message.hasOwnProperty("condition"))
                                         if (!$util.isString(message.condition))
                                             return "condition: string expected";
@@ -166418,9 +173535,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec} ConditionBoostSpec
                                  */
-                                ConditionBoostSpec.fromObject = function fromObject(object) {
+                                ConditionBoostSpec.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec();
                                     if (object.condition != null)
                                         message.condition = String(object.condition);
@@ -166506,7 +173627,7 @@
                             function QueryExpansionSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -166581,9 +173702,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            QueryExpansionSpec.decode = function decode(reader, length, error) {
+                            QueryExpansionSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.QueryExpansionSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -166599,7 +173724,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -166630,9 +173755,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            QueryExpansionSpec.verify = function verify(message) {
+                            QueryExpansionSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.condition != null && message.hasOwnProperty("condition"))
                                     switch (message.condition) {
                                     default:
@@ -166656,9 +173785,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchRequest.QueryExpansionSpec} QueryExpansionSpec
                              */
-                            QueryExpansionSpec.fromObject = function fromObject(object) {
+                            QueryExpansionSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.QueryExpansionSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchRequest.QueryExpansionSpec();
                                 switch (object.condition) {
                                 default:
@@ -166774,7 +173907,7 @@
                             function PersonalizationSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -166839,9 +173972,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PersonalizationSpec.decode = function decode(reader, length, error) {
+                            PersonalizationSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -166853,7 +173990,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -166884,9 +174021,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PersonalizationSpec.verify = function verify(message) {
+                            PersonalizationSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -166907,9 +174048,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec} PersonalizationSpec
                              */
-                            PersonalizationSpec.fromObject = function fromObject(object) {
+                            PersonalizationSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec();
                                 switch (object.mode) {
                                 default:
@@ -167019,7 +174164,7 @@
                             function SpellCorrectionSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -167084,9 +174229,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SpellCorrectionSpec.decode = function decode(reader, length, error) {
+                            SpellCorrectionSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -167098,7 +174247,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -167129,9 +174278,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SpellCorrectionSpec.verify = function verify(message) {
+                            SpellCorrectionSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.mode != null && message.hasOwnProperty("mode"))
                                     switch (message.mode) {
                                     default:
@@ -167152,9 +174305,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec} SpellCorrectionSpec
                              */
-                            SpellCorrectionSpec.fromObject = function fromObject(object) {
+                            SpellCorrectionSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchRequest.SpellCorrectionSpec();
                                 switch (object.mode) {
                                 default:
@@ -167266,7 +174423,7 @@
                             function ConversationalSearchSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -167351,9 +174508,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalSearchSpec.decode = function decode(reader, length, error) {
+                            ConversationalSearchSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -167369,11 +174530,11 @@
                                             break;
                                         }
                                     case 3: {
-                                            message.userAnswer = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.decode(reader, reader.uint32());
+                                            message.userAnswer = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -167404,9 +174565,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalSearchSpec.verify = function verify(message) {
+                            ConversationalSearchSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.followupConversationRequested != null && message.hasOwnProperty("followupConversationRequested"))
                                     if (typeof message.followupConversationRequested !== "boolean")
                                         return "followupConversationRequested: boolean expected";
@@ -167414,7 +174579,7 @@
                                     if (!$util.isString(message.conversationId))
                                         return "conversationId: string expected";
                                 if (message.userAnswer != null && message.hasOwnProperty("userAnswer")) {
-                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.verify(message.userAnswer);
+                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.verify(message.userAnswer, long + 1);
                                     if (error)
                                         return "userAnswer." + error;
                                 }
@@ -167429,9 +174594,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec} ConversationalSearchSpec
                              */
-                            ConversationalSearchSpec.fromObject = function fromObject(object) {
+                            ConversationalSearchSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec();
                                 if (object.followupConversationRequested != null)
                                     message.followupConversationRequested = Boolean(object.followupConversationRequested);
@@ -167440,7 +174609,7 @@
                                 if (object.userAnswer != null) {
                                     if (typeof object.userAnswer !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.userAnswer: object expected");
-                                    message.userAnswer = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.fromObject(object.userAnswer);
+                                    message.userAnswer = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.fromObject(object.userAnswer, long + 1);
                                 }
                                 return message;
                             };
@@ -167519,7 +174688,7 @@
                                 function UserAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -167608,9 +174777,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                UserAnswer.decode = function decode(reader, length, error) {
+                                UserAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -167622,11 +174795,11 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.selectedAnswer = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.decode(reader, reader.uint32());
+                                                message.selectedAnswer = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -167657,9 +174830,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                UserAnswer.verify = function verify(message) {
+                                UserAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.textAnswer != null && message.hasOwnProperty("textAnswer")) {
                                         properties.type = 1;
@@ -167671,7 +174848,7 @@
                                             return "type: multiple values";
                                         properties.type = 1;
                                         {
-                                            var error = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.verify(message.selectedAnswer);
+                                            var error = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.verify(message.selectedAnswer, long + 1);
                                             if (error)
                                                 return "selectedAnswer." + error;
                                         }
@@ -167687,16 +174864,20 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer} UserAnswer
                                  */
-                                UserAnswer.fromObject = function fromObject(object) {
+                                UserAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer();
                                     if (object.textAnswer != null)
                                         message.textAnswer = String(object.textAnswer);
                                     if (object.selectedAnswer != null) {
                                         if (typeof object.selectedAnswer !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.selectedAnswer: object expected");
-                                        message.selectedAnswer = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer);
+                                        message.selectedAnswer = $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer, long + 1);
                                     }
                                     return message;
                                 };
@@ -167775,7 +174956,7 @@
                                         this.productAttributeValues = [];
                                         if (properties)
                                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                                if (properties[keys[i]] != null)
+                                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                     this[keys[i]] = properties[keys[i]];
                                     }
     
@@ -167851,9 +175032,13 @@
                                      * @throws {Error} If the payload is not a reader or valid buffer
                                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                      */
-                                    SelectedAnswer.decode = function decode(reader, length, error) {
+                                    SelectedAnswer.decode = function decode(reader, length, error, long) {
                                         if (!(reader instanceof $Reader))
                                             reader = $Reader.create(reader);
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $Reader.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer();
                                         while (reader.pos < end) {
                                             var tag = reader.uint32();
@@ -167863,15 +175048,15 @@
                                             case 1: {
                                                     if (!(message.productAttributeValues && message.productAttributeValues.length))
                                                         message.productAttributeValues = [];
-                                                    message.productAttributeValues.push($root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32()));
+                                                    message.productAttributeValues.push($root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1));
                                                     break;
                                                 }
                                             case 2: {
-                                                    message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32());
+                                                    message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 }
                                             default:
-                                                reader.skipType(tag & 7);
+                                                reader.skipType(tag & 7, long);
                                                 break;
                                             }
                                         }
@@ -167902,20 +175087,24 @@
                                      * @param {Object.<string,*>} message Plain object to verify
                                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                      */
-                                    SelectedAnswer.verify = function verify(message) {
+                                    SelectedAnswer.verify = function verify(message, long) {
                                         if (typeof message !== "object" || message === null)
                                             return "object expected";
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            return "maximum nesting depth exceeded";
                                         if (message.productAttributeValues != null && message.hasOwnProperty("productAttributeValues")) {
                                             if (!Array.isArray(message.productAttributeValues))
                                                 return "productAttributeValues: array expected";
                                             for (var i = 0; i < message.productAttributeValues.length; ++i) {
-                                                var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValues[i]);
+                                                var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValues[i], long + 1);
                                                 if (error)
                                                     return "productAttributeValues." + error;
                                             }
                                         }
                                         if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                            var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue);
+                                            var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                             if (error)
                                                 return "productAttributeValue." + error;
                                         }
@@ -167930,9 +175119,13 @@
                                      * @param {Object.<string,*>} object Plain object
                                      * @returns {google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer} SelectedAnswer
                                      */
-                                    SelectedAnswer.fromObject = function fromObject(object) {
+                                    SelectedAnswer.fromObject = function fromObject(object, long) {
                                         if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer)
                                             return object;
+                                        if (long === undefined)
+                                            long = 0;
+                                        if (long > $util.recursionLimit)
+                                            throw Error("maximum nesting depth exceeded");
                                         var message = new $root.google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer();
                                         if (object.productAttributeValues) {
                                             if (!Array.isArray(object.productAttributeValues))
@@ -167941,13 +175134,13 @@
                                             for (var i = 0; i < object.productAttributeValues.length; ++i) {
                                                 if (typeof object.productAttributeValues[i] !== "object")
                                                     throw TypeError(".google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.productAttributeValues: object expected");
-                                                message.productAttributeValues[i] = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValues[i]);
+                                                message.productAttributeValues[i] = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValues[i], long + 1);
                                             }
                                         }
                                         if (object.productAttributeValue != null) {
                                             if (typeof object.productAttributeValue !== "object")
                                                 throw TypeError(".google.cloud.retail.v2beta.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.productAttributeValue: object expected");
-                                            message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                            message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                         }
                                         return message;
                                     };
@@ -168036,7 +175229,7 @@
                                 this.appliedTiles = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -168112,9 +175305,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TileNavigationSpec.decode = function decode(reader, length, error) {
+                            TileNavigationSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -168128,11 +175325,11 @@
                                     case 2: {
                                             if (!(message.appliedTiles && message.appliedTiles.length))
                                                 message.appliedTiles = [];
-                                            message.appliedTiles.push($root.google.cloud.retail.v2beta.Tile.decode(reader, reader.uint32()));
+                                            message.appliedTiles.push($root.google.cloud.retail.v2beta.Tile.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -168163,9 +175360,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TileNavigationSpec.verify = function verify(message) {
+                            TileNavigationSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.tileNavigationRequested != null && message.hasOwnProperty("tileNavigationRequested"))
                                     if (typeof message.tileNavigationRequested !== "boolean")
                                         return "tileNavigationRequested: boolean expected";
@@ -168173,7 +175374,7 @@
                                     if (!Array.isArray(message.appliedTiles))
                                         return "appliedTiles: array expected";
                                     for (var i = 0; i < message.appliedTiles.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.Tile.verify(message.appliedTiles[i]);
+                                        var error = $root.google.cloud.retail.v2beta.Tile.verify(message.appliedTiles[i], long + 1);
                                         if (error)
                                             return "appliedTiles." + error;
                                     }
@@ -168189,9 +175390,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec} TileNavigationSpec
                              */
-                            TileNavigationSpec.fromObject = function fromObject(object) {
+                            TileNavigationSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec();
                                 if (object.tileNavigationRequested != null)
                                     message.tileNavigationRequested = Boolean(object.tileNavigationRequested);
@@ -168202,7 +175407,7 @@
                                     for (var i = 0; i < object.appliedTiles.length; ++i) {
                                         if (typeof object.appliedTiles[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchRequest.TileNavigationSpec.appliedTiles: object expected");
-                                        message.appliedTiles[i] = $root.google.cloud.retail.v2beta.Tile.fromObject(object.appliedTiles[i]);
+                                        message.appliedTiles[i] = $root.google.cloud.retail.v2beta.Tile.fromObject(object.appliedTiles[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -168321,7 +175526,7 @@
                             this.experimentInfo = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -168521,9 +175726,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SearchResponse.decode = function decode(reader, length, error) {
+                        SearchResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -168533,13 +175742,13 @@
                                 case 1: {
                                         if (!(message.results && message.results.length))
                                             message.results = [];
-                                        message.results.push($root.google.cloud.retail.v2beta.SearchResponse.SearchResult.decode(reader, reader.uint32()));
+                                        message.results.push($root.google.cloud.retail.v2beta.SearchResponse.SearchResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
                                         if (!(message.facets && message.facets.length))
                                             message.facets = [];
-                                        message.facets.push($root.google.cloud.retail.v2beta.SearchResponse.Facet.decode(reader, reader.uint32()));
+                                        message.facets.push($root.google.cloud.retail.v2beta.SearchResponse.Facet.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 3: {
@@ -168559,7 +175768,7 @@
                                         break;
                                     }
                                 case 7: {
-                                        message.queryExpansionInfo = $root.google.cloud.retail.v2beta.SearchResponse.QueryExpansionInfo.decode(reader, reader.uint32());
+                                        message.queryExpansionInfo = $root.google.cloud.retail.v2beta.SearchResponse.QueryExpansionInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -168573,31 +175782,31 @@
                                         break;
                                     }
                                 case 22: {
-                                        message.pinControlMetadata = $root.google.cloud.retail.v2beta.PinControlMetadata.decode(reader, reader.uint32());
+                                        message.pinControlMetadata = $root.google.cloud.retail.v2beta.PinControlMetadata.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
                                         if (!(message.invalidConditionBoostSpecs && message.invalidConditionBoostSpecs.length))
                                             message.invalidConditionBoostSpecs = [];
-                                        message.invalidConditionBoostSpecs.push($root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32()));
+                                        message.invalidConditionBoostSpecs.push($root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 17: {
                                         if (!(message.experimentInfo && message.experimentInfo.length))
                                             message.experimentInfo = [];
-                                        message.experimentInfo.push($root.google.cloud.retail.v2beta.ExperimentInfo.decode(reader, reader.uint32()));
+                                        message.experimentInfo.push($root.google.cloud.retail.v2beta.ExperimentInfo.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 18: {
-                                        message.conversationalSearchResult = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.decode(reader, reader.uint32());
+                                        message.conversationalSearchResult = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
-                                        message.tileNavigationResult = $root.google.cloud.retail.v2beta.SearchResponse.TileNavigationResult.decode(reader, reader.uint32());
+                                        message.tileNavigationResult = $root.google.cloud.retail.v2beta.SearchResponse.TileNavigationResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -168628,14 +175837,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SearchResponse.verify = function verify(message) {
+                        SearchResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.results != null && message.hasOwnProperty("results")) {
                                 if (!Array.isArray(message.results))
                                     return "results: array expected";
                                 for (var i = 0; i < message.results.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.SearchResponse.SearchResult.verify(message.results[i]);
+                                    var error = $root.google.cloud.retail.v2beta.SearchResponse.SearchResult.verify(message.results[i], long + 1);
                                     if (error)
                                         return "results." + error;
                                 }
@@ -168644,7 +175857,7 @@
                                 if (!Array.isArray(message.facets))
                                     return "facets: array expected";
                                 for (var i = 0; i < message.facets.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.SearchResponse.Facet.verify(message.facets[i]);
+                                    var error = $root.google.cloud.retail.v2beta.SearchResponse.Facet.verify(message.facets[i], long + 1);
                                     if (error)
                                         return "facets." + error;
                                 }
@@ -168662,7 +175875,7 @@
                                 if (!$util.isString(message.nextPageToken))
                                     return "nextPageToken: string expected";
                             if (message.queryExpansionInfo != null && message.hasOwnProperty("queryExpansionInfo")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchResponse.QueryExpansionInfo.verify(message.queryExpansionInfo);
+                                var error = $root.google.cloud.retail.v2beta.SearchResponse.QueryExpansionInfo.verify(message.queryExpansionInfo, long + 1);
                                 if (error)
                                     return "queryExpansionInfo." + error;
                             }
@@ -168677,7 +175890,7 @@
                                         return "appliedControls: string[] expected";
                             }
                             if (message.pinControlMetadata != null && message.hasOwnProperty("pinControlMetadata")) {
-                                var error = $root.google.cloud.retail.v2beta.PinControlMetadata.verify(message.pinControlMetadata);
+                                var error = $root.google.cloud.retail.v2beta.PinControlMetadata.verify(message.pinControlMetadata, long + 1);
                                 if (error)
                                     return "pinControlMetadata." + error;
                             }
@@ -168685,7 +175898,7 @@
                                 if (!Array.isArray(message.invalidConditionBoostSpecs))
                                     return "invalidConditionBoostSpecs: array expected";
                                 for (var i = 0; i < message.invalidConditionBoostSpecs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.invalidConditionBoostSpecs[i]);
+                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.verify(message.invalidConditionBoostSpecs[i], long + 1);
                                     if (error)
                                         return "invalidConditionBoostSpecs." + error;
                                 }
@@ -168694,18 +175907,18 @@
                                 if (!Array.isArray(message.experimentInfo))
                                     return "experimentInfo: array expected";
                                 for (var i = 0; i < message.experimentInfo.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.ExperimentInfo.verify(message.experimentInfo[i]);
+                                    var error = $root.google.cloud.retail.v2beta.ExperimentInfo.verify(message.experimentInfo[i], long + 1);
                                     if (error)
                                         return "experimentInfo." + error;
                                 }
                             }
                             if (message.conversationalSearchResult != null && message.hasOwnProperty("conversationalSearchResult")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.verify(message.conversationalSearchResult);
+                                var error = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.verify(message.conversationalSearchResult, long + 1);
                                 if (error)
                                     return "conversationalSearchResult." + error;
                             }
                             if (message.tileNavigationResult != null && message.hasOwnProperty("tileNavigationResult")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchResponse.TileNavigationResult.verify(message.tileNavigationResult);
+                                var error = $root.google.cloud.retail.v2beta.SearchResponse.TileNavigationResult.verify(message.tileNavigationResult, long + 1);
                                 if (error)
                                     return "tileNavigationResult." + error;
                             }
@@ -168720,9 +175933,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.SearchResponse} SearchResponse
                          */
-                        SearchResponse.fromObject = function fromObject(object) {
+                        SearchResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.SearchResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.SearchResponse();
                             if (object.results) {
                                 if (!Array.isArray(object.results))
@@ -168731,7 +175948,7 @@
                                 for (var i = 0; i < object.results.length; ++i) {
                                     if (typeof object.results[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.SearchResponse.results: object expected");
-                                    message.results[i] = $root.google.cloud.retail.v2beta.SearchResponse.SearchResult.fromObject(object.results[i]);
+                                    message.results[i] = $root.google.cloud.retail.v2beta.SearchResponse.SearchResult.fromObject(object.results[i], long + 1);
                                 }
                             }
                             if (object.facets) {
@@ -168741,7 +175958,7 @@
                                 for (var i = 0; i < object.facets.length; ++i) {
                                     if (typeof object.facets[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.SearchResponse.facets: object expected");
-                                    message.facets[i] = $root.google.cloud.retail.v2beta.SearchResponse.Facet.fromObject(object.facets[i]);
+                                    message.facets[i] = $root.google.cloud.retail.v2beta.SearchResponse.Facet.fromObject(object.facets[i], long + 1);
                                 }
                             }
                             if (object.totalSize != null)
@@ -168755,7 +175972,7 @@
                             if (object.queryExpansionInfo != null) {
                                 if (typeof object.queryExpansionInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchResponse.queryExpansionInfo: object expected");
-                                message.queryExpansionInfo = $root.google.cloud.retail.v2beta.SearchResponse.QueryExpansionInfo.fromObject(object.queryExpansionInfo);
+                                message.queryExpansionInfo = $root.google.cloud.retail.v2beta.SearchResponse.QueryExpansionInfo.fromObject(object.queryExpansionInfo, long + 1);
                             }
                             if (object.redirectUri != null)
                                 message.redirectUri = String(object.redirectUri);
@@ -168769,7 +175986,7 @@
                             if (object.pinControlMetadata != null) {
                                 if (typeof object.pinControlMetadata !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchResponse.pinControlMetadata: object expected");
-                                message.pinControlMetadata = $root.google.cloud.retail.v2beta.PinControlMetadata.fromObject(object.pinControlMetadata);
+                                message.pinControlMetadata = $root.google.cloud.retail.v2beta.PinControlMetadata.fromObject(object.pinControlMetadata, long + 1);
                             }
                             if (object.invalidConditionBoostSpecs) {
                                 if (!Array.isArray(object.invalidConditionBoostSpecs))
@@ -168778,7 +175995,7 @@
                                 for (var i = 0; i < object.invalidConditionBoostSpecs.length; ++i) {
                                     if (typeof object.invalidConditionBoostSpecs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.SearchResponse.invalidConditionBoostSpecs: object expected");
-                                    message.invalidConditionBoostSpecs[i] = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.invalidConditionBoostSpecs[i]);
+                                    message.invalidConditionBoostSpecs[i] = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.ConditionBoostSpec.fromObject(object.invalidConditionBoostSpecs[i], long + 1);
                                 }
                             }
                             if (object.experimentInfo) {
@@ -168788,18 +176005,18 @@
                                 for (var i = 0; i < object.experimentInfo.length; ++i) {
                                     if (typeof object.experimentInfo[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.SearchResponse.experimentInfo: object expected");
-                                    message.experimentInfo[i] = $root.google.cloud.retail.v2beta.ExperimentInfo.fromObject(object.experimentInfo[i]);
+                                    message.experimentInfo[i] = $root.google.cloud.retail.v2beta.ExperimentInfo.fromObject(object.experimentInfo[i], long + 1);
                                 }
                             }
                             if (object.conversationalSearchResult != null) {
                                 if (typeof object.conversationalSearchResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchResponse.conversationalSearchResult: object expected");
-                                message.conversationalSearchResult = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.fromObject(object.conversationalSearchResult);
+                                message.conversationalSearchResult = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.fromObject(object.conversationalSearchResult, long + 1);
                             }
                             if (object.tileNavigationResult != null) {
                                 if (typeof object.tileNavigationResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SearchResponse.tileNavigationResult: object expected");
-                                message.tileNavigationResult = $root.google.cloud.retail.v2beta.SearchResponse.TileNavigationResult.fromObject(object.tileNavigationResult);
+                                message.tileNavigationResult = $root.google.cloud.retail.v2beta.SearchResponse.TileNavigationResult.fromObject(object.tileNavigationResult, long + 1);
                             }
                             return message;
                         };
@@ -168937,7 +176154,7 @@
                                 this.modelScores = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -169072,9 +176289,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SearchResult.decode = function decode(reader, length, error) {
+                            SearchResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchResponse.SearchResult(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -169086,7 +176307,7 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.product = $root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32());
+                                            message.product = $root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 3: {
@@ -169106,13 +176327,15 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                                    value = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.matchingVariantFields, key);
                                             message.matchingVariantFields[key] = value;
                                             break;
                                         }
@@ -169129,13 +176352,15 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32());
+                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.variantRollupValues, key);
                                             message.variantRollupValues[key] = value;
                                             break;
                                         }
@@ -169158,18 +176383,20 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.cloud.retail.v2beta.DoubleList.decode(reader, reader.uint32());
+                                                    value = $root.google.cloud.retail.v2beta.DoubleList.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.modelScores, key);
                                             message.modelScores[key] = value;
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -169200,14 +176427,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SearchResult.verify = function verify(message) {
+                            SearchResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.id != null && message.hasOwnProperty("id"))
                                     if (!$util.isString(message.id))
                                         return "id: string expected";
                                 if (message.product != null && message.hasOwnProperty("product")) {
-                                    var error = $root.google.cloud.retail.v2beta.Product.verify(message.product);
+                                    var error = $root.google.cloud.retail.v2beta.Product.verify(message.product, long + 1);
                                     if (error)
                                         return "product." + error;
                                 }
@@ -169219,7 +176450,7 @@
                                         return "matchingVariantFields: object expected";
                                     var key = Object.keys(message.matchingVariantFields);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.protobuf.FieldMask.verify(message.matchingVariantFields[key[i]]);
+                                        var error = $root.google.protobuf.FieldMask.verify(message.matchingVariantFields[key[i]], long + 1);
                                         if (error)
                                             return "matchingVariantFields." + error;
                                     }
@@ -169229,7 +176460,7 @@
                                         return "variantRollupValues: object expected";
                                     var key = Object.keys(message.variantRollupValues);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.protobuf.Value.verify(message.variantRollupValues[key[i]]);
+                                        var error = $root.google.protobuf.Value.verify(message.variantRollupValues[key[i]], long + 1);
                                         if (error)
                                             return "variantRollupValues." + error;
                                     }
@@ -169246,7 +176477,7 @@
                                         return "modelScores: object expected";
                                     var key = Object.keys(message.modelScores);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.DoubleList.verify(message.modelScores[key[i]]);
+                                        var error = $root.google.cloud.retail.v2beta.DoubleList.verify(message.modelScores[key[i]], long + 1);
                                         if (error)
                                             return "modelScores." + error;
                                     }
@@ -169262,16 +176493,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchResponse.SearchResult} SearchResult
                              */
-                            SearchResult.fromObject = function fromObject(object) {
+                            SearchResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchResponse.SearchResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchResponse.SearchResult();
                                 if (object.id != null)
                                     message.id = String(object.id);
                                 if (object.product != null) {
                                     if (typeof object.product !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.SearchResponse.SearchResult.product: object expected");
-                                    message.product = $root.google.cloud.retail.v2beta.Product.fromObject(object.product);
+                                    message.product = $root.google.cloud.retail.v2beta.Product.fromObject(object.product, long + 1);
                                 }
                                 if (object.matchingVariantCount != null)
                                     message.matchingVariantCount = object.matchingVariantCount | 0;
@@ -169280,9 +176515,11 @@
                                         throw TypeError(".google.cloud.retail.v2beta.SearchResponse.SearchResult.matchingVariantFields: object expected");
                                     message.matchingVariantFields = {};
                                     for (var keys = Object.keys(object.matchingVariantFields), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.matchingVariantFields, keys[i]);
                                         if (typeof object.matchingVariantFields[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchResponse.SearchResult.matchingVariantFields: object expected");
-                                        message.matchingVariantFields[keys[i]] = $root.google.protobuf.FieldMask.fromObject(object.matchingVariantFields[keys[i]]);
+                                        message.matchingVariantFields[keys[i]] = $root.google.protobuf.FieldMask.fromObject(object.matchingVariantFields[keys[i]], long + 1);
                                     }
                                 }
                                 if (object.variantRollupValues) {
@@ -169290,9 +176527,11 @@
                                         throw TypeError(".google.cloud.retail.v2beta.SearchResponse.SearchResult.variantRollupValues: object expected");
                                     message.variantRollupValues = {};
                                     for (var keys = Object.keys(object.variantRollupValues), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.variantRollupValues, keys[i]);
                                         if (typeof object.variantRollupValues[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchResponse.SearchResult.variantRollupValues: object expected");
-                                        message.variantRollupValues[keys[i]] = $root.google.protobuf.Value.fromObject(object.variantRollupValues[keys[i]]);
+                                        message.variantRollupValues[keys[i]] = $root.google.protobuf.Value.fromObject(object.variantRollupValues[keys[i]], long + 1);
                                     }
                                 }
                                 if (object.personalLabels) {
@@ -169307,9 +176546,11 @@
                                         throw TypeError(".google.cloud.retail.v2beta.SearchResponse.SearchResult.modelScores: object expected");
                                     message.modelScores = {};
                                     for (var keys = Object.keys(object.modelScores), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.modelScores, keys[i]);
                                         if (typeof object.modelScores[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchResponse.SearchResult.modelScores: object expected");
-                                        message.modelScores[keys[i]] = $root.google.cloud.retail.v2beta.DoubleList.fromObject(object.modelScores[keys[i]]);
+                                        message.modelScores[keys[i]] = $root.google.cloud.retail.v2beta.DoubleList.fromObject(object.modelScores[keys[i]], long + 1);
                                     }
                                 }
                                 return message;
@@ -169349,13 +176590,19 @@
                                 var keys2;
                                 if (message.matchingVariantFields && (keys2 = Object.keys(message.matchingVariantFields)).length) {
                                     object.matchingVariantFields = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.matchingVariantFields, keys2[j]);
                                         object.matchingVariantFields[keys2[j]] = $root.google.protobuf.FieldMask.toObject(message.matchingVariantFields[keys2[j]], options);
+                                    }
                                 }
                                 if (message.variantRollupValues && (keys2 = Object.keys(message.variantRollupValues)).length) {
                                     object.variantRollupValues = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.variantRollupValues, keys2[j]);
                                         object.variantRollupValues[keys2[j]] = $root.google.protobuf.Value.toObject(message.variantRollupValues[keys2[j]], options);
+                                    }
                                 }
                                 if (message.personalLabels && message.personalLabels.length) {
                                     object.personalLabels = [];
@@ -169364,8 +176611,11 @@
                                 }
                                 if (message.modelScores && (keys2 = Object.keys(message.modelScores)).length) {
                                     object.modelScores = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.modelScores, keys2[j]);
                                         object.modelScores[keys2[j]] = $root.google.cloud.retail.v2beta.DoubleList.toObject(message.modelScores[keys2[j]], options);
+                                    }
                                 }
                                 return object;
                             };
@@ -169422,7 +176672,7 @@
                                 this.values = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -169508,9 +176758,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            Facet.decode = function decode(reader, length, error) {
+                            Facet.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchResponse.Facet();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -169524,7 +176778,7 @@
                                     case 2: {
                                             if (!(message.values && message.values.length))
                                                 message.values = [];
-                                            message.values.push($root.google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue.decode(reader, reader.uint32()));
+                                            message.values.push($root.google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 3: {
@@ -169532,7 +176786,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -169563,9 +176817,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            Facet.verify = function verify(message) {
+                            Facet.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.key != null && message.hasOwnProperty("key"))
                                     if (!$util.isString(message.key))
                                         return "key: string expected";
@@ -169573,7 +176831,7 @@
                                     if (!Array.isArray(message.values))
                                         return "values: array expected";
                                     for (var i = 0; i < message.values.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue.verify(message.values[i]);
+                                        var error = $root.google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue.verify(message.values[i], long + 1);
                                         if (error)
                                             return "values." + error;
                                     }
@@ -169592,9 +176850,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchResponse.Facet} Facet
                              */
-                            Facet.fromObject = function fromObject(object) {
+                            Facet.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchResponse.Facet)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchResponse.Facet();
                                 if (object.key != null)
                                     message.key = String(object.key);
@@ -169605,7 +176867,7 @@
                                     for (var i = 0; i < object.values.length; ++i) {
                                         if (typeof object.values[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchResponse.Facet.values: object expected");
-                                        message.values[i] = $root.google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue.fromObject(object.values[i]);
+                                        message.values[i] = $root.google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue.fromObject(object.values[i], long + 1);
                                     }
                                 }
                                 if (object.dynamicFacet != null)
@@ -169694,7 +176956,7 @@
                                 function FacetValue(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -169813,9 +177075,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                FacetValue.decode = function decode(reader, length, error) {
+                                FacetValue.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -169827,7 +177093,7 @@
                                                 break;
                                             }
                                         case 2: {
-                                                message.interval = $root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32());
+                                                message.interval = $root.google.cloud.retail.v2beta.Interval.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         case 3: {
@@ -169843,7 +177109,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -169874,9 +177140,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                FacetValue.verify = function verify(message) {
+                                FacetValue.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     var properties = {};
                                     if (message.value != null && message.hasOwnProperty("value")) {
                                         properties.facetValue = 1;
@@ -169888,7 +177158,7 @@
                                             return "facetValue: multiple values";
                                         properties.facetValue = 1;
                                         {
-                                            var error = $root.google.cloud.retail.v2beta.Interval.verify(message.interval);
+                                            var error = $root.google.cloud.retail.v2beta.Interval.verify(message.interval, long + 1);
                                             if (error)
                                                 return "interval." + error;
                                         }
@@ -169913,16 +177183,20 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue} FacetValue
                                  */
-                                FacetValue.fromObject = function fromObject(object) {
+                                FacetValue.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue();
                                     if (object.value != null)
                                         message.value = String(object.value);
                                     if (object.interval != null) {
                                         if (typeof object.interval !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchResponse.Facet.FacetValue.interval: object expected");
-                                        message.interval = $root.google.cloud.retail.v2beta.Interval.fromObject(object.interval);
+                                        message.interval = $root.google.cloud.retail.v2beta.Interval.fromObject(object.interval, long + 1);
                                     }
                                     if (object.count != null)
                                         if ($util.Long)
@@ -170037,7 +177311,7 @@
                             function QueryExpansionInfo(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -170112,9 +177386,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            QueryExpansionInfo.decode = function decode(reader, length, error) {
+                            QueryExpansionInfo.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchResponse.QueryExpansionInfo();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -170130,7 +177408,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -170161,9 +177439,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            QueryExpansionInfo.verify = function verify(message) {
+                            QueryExpansionInfo.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.expandedQuery != null && message.hasOwnProperty("expandedQuery"))
                                     if (typeof message.expandedQuery !== "boolean")
                                         return "expandedQuery: boolean expected";
@@ -170181,9 +177463,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchResponse.QueryExpansionInfo} QueryExpansionInfo
                              */
-                            QueryExpansionInfo.fromObject = function fromObject(object) {
+                            QueryExpansionInfo.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchResponse.QueryExpansionInfo)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchResponse.QueryExpansionInfo();
                                 if (object.expandedQuery != null)
                                     message.expandedQuery = Boolean(object.expandedQuery);
@@ -170286,7 +177572,7 @@
                                 this.suggestedAnswers = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -170403,9 +177689,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalSearchResult.decode = function decode(reader, length, error) {
+                            ConversationalSearchResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -170423,7 +177713,7 @@
                                     case 3: {
                                             if (!(message.additionalFilters && message.additionalFilters.length))
                                                 message.additionalFilters = [];
-                                            message.additionalFilters.push($root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32()));
+                                            message.additionalFilters.push($root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 4: {
@@ -170433,15 +177723,15 @@
                                     case 5: {
                                             if (!(message.suggestedAnswers && message.suggestedAnswers.length))
                                                 message.suggestedAnswers = [];
-                                            message.suggestedAnswers.push($root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer.decode(reader, reader.uint32()));
+                                            message.suggestedAnswers.push($root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 6: {
-                                            message.additionalFilter = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32());
+                                            message.additionalFilter = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -170472,9 +177762,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalSearchResult.verify = function verify(message) {
+                            ConversationalSearchResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.conversationId != null && message.hasOwnProperty("conversationId"))
                                     if (!$util.isString(message.conversationId))
                                         return "conversationId: string expected";
@@ -170485,7 +177779,7 @@
                                     if (!Array.isArray(message.additionalFilters))
                                         return "additionalFilters: array expected";
                                     for (var i = 0; i < message.additionalFilters.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilters[i]);
+                                        var error = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilters[i], long + 1);
                                         if (error)
                                             return "additionalFilters." + error;
                                     }
@@ -170497,13 +177791,13 @@
                                     if (!Array.isArray(message.suggestedAnswers))
                                         return "suggestedAnswers: array expected";
                                     for (var i = 0; i < message.suggestedAnswers.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer.verify(message.suggestedAnswers[i]);
+                                        var error = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer.verify(message.suggestedAnswers[i], long + 1);
                                         if (error)
                                             return "suggestedAnswers." + error;
                                     }
                                 }
                                 if (message.additionalFilter != null && message.hasOwnProperty("additionalFilter")) {
-                                    var error = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilter);
+                                    var error = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.verify(message.additionalFilter, long + 1);
                                     if (error)
                                         return "additionalFilter." + error;
                                 }
@@ -170518,9 +177812,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult} ConversationalSearchResult
                              */
-                            ConversationalSearchResult.fromObject = function fromObject(object) {
+                            ConversationalSearchResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult();
                                 if (object.conversationId != null)
                                     message.conversationId = String(object.conversationId);
@@ -170533,7 +177831,7 @@
                                     for (var i = 0; i < object.additionalFilters.length; ++i) {
                                         if (typeof object.additionalFilters[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.additionalFilters: object expected");
-                                        message.additionalFilters[i] = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilters[i]);
+                                        message.additionalFilters[i] = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilters[i], long + 1);
                                     }
                                 }
                                 if (object.followupQuestion != null)
@@ -170545,13 +177843,13 @@
                                     for (var i = 0; i < object.suggestedAnswers.length; ++i) {
                                         if (typeof object.suggestedAnswers[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.suggestedAnswers: object expected");
-                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer.fromObject(object.suggestedAnswers[i]);
+                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer.fromObject(object.suggestedAnswers[i], long + 1);
                                     }
                                 }
                                 if (object.additionalFilter != null) {
                                     if (typeof object.additionalFilter !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.additionalFilter: object expected");
-                                    message.additionalFilter = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilter);
+                                    message.additionalFilter = $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.fromObject(object.additionalFilter, long + 1);
                                 }
                                 return message;
                             };
@@ -170646,7 +177944,7 @@
                                 function SuggestedAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -170711,9 +178009,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                SuggestedAnswer.decode = function decode(reader, length, error) {
+                                SuggestedAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -170721,11 +178023,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -170756,11 +178058,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                SuggestedAnswer.verify = function verify(message) {
+                                SuggestedAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -170775,14 +178081,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer} SuggestedAnswer
                                  */
-                                SuggestedAnswer.fromObject = function fromObject(object) {
+                                SuggestedAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.SuggestedAnswer.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -170856,7 +178166,7 @@
                                 function AdditionalFilter(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -170921,9 +178231,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                AdditionalFilter.decode = function decode(reader, length, error) {
+                                AdditionalFilter.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -170931,11 +178245,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -170966,11 +178280,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                AdditionalFilter.verify = function verify(message) {
+                                AdditionalFilter.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -170985,14 +178303,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter} AdditionalFilter
                                  */
-                                AdditionalFilter.fromObject = function fromObject(object) {
+                                AdditionalFilter.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchResponse.ConversationalSearchResult.AdditionalFilter.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -171070,7 +178392,7 @@
                                 this.tiles = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -171136,9 +178458,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            TileNavigationResult.decode = function decode(reader, length, error) {
+                            TileNavigationResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SearchResponse.TileNavigationResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -171148,11 +178474,11 @@
                                     case 1: {
                                             if (!(message.tiles && message.tiles.length))
                                                 message.tiles = [];
-                                            message.tiles.push($root.google.cloud.retail.v2beta.Tile.decode(reader, reader.uint32()));
+                                            message.tiles.push($root.google.cloud.retail.v2beta.Tile.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -171183,14 +178509,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            TileNavigationResult.verify = function verify(message) {
+                            TileNavigationResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.tiles != null && message.hasOwnProperty("tiles")) {
                                     if (!Array.isArray(message.tiles))
                                         return "tiles: array expected";
                                     for (var i = 0; i < message.tiles.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.Tile.verify(message.tiles[i]);
+                                        var error = $root.google.cloud.retail.v2beta.Tile.verify(message.tiles[i], long + 1);
                                         if (error)
                                             return "tiles." + error;
                                     }
@@ -171206,9 +178536,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.SearchResponse.TileNavigationResult} TileNavigationResult
                              */
-                            TileNavigationResult.fromObject = function fromObject(object) {
+                            TileNavigationResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.SearchResponse.TileNavigationResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.SearchResponse.TileNavigationResult();
                                 if (object.tiles) {
                                     if (!Array.isArray(object.tiles))
@@ -171217,7 +178551,7 @@
                                     for (var i = 0; i < object.tiles.length; ++i) {
                                         if (typeof object.tiles[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.SearchResponse.TileNavigationResult.tiles: object expected");
-                                        message.tiles[i] = $root.google.cloud.retail.v2beta.Tile.fromObject(object.tiles[i]);
+                                        message.tiles[i] = $root.google.cloud.retail.v2beta.Tile.fromObject(object.tiles[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -171299,7 +178633,7 @@
                         function ExperimentInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -171388,9 +178722,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExperimentInfo.decode = function decode(reader, length, error) {
+                        ExperimentInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ExperimentInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -171398,7 +178736,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.servingConfigExperiment = $root.google.cloud.retail.v2beta.ExperimentInfo.ServingConfigExperiment.decode(reader, reader.uint32());
+                                        message.servingConfigExperiment = $root.google.cloud.retail.v2beta.ExperimentInfo.ServingConfigExperiment.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
@@ -171406,7 +178744,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -171437,14 +178775,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExperimentInfo.verify = function verify(message) {
+                        ExperimentInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.servingConfigExperiment != null && message.hasOwnProperty("servingConfigExperiment")) {
                                 properties.experimentMetadata = 1;
                                 {
-                                    var error = $root.google.cloud.retail.v2beta.ExperimentInfo.ServingConfigExperiment.verify(message.servingConfigExperiment);
+                                    var error = $root.google.cloud.retail.v2beta.ExperimentInfo.ServingConfigExperiment.verify(message.servingConfigExperiment, long + 1);
                                     if (error)
                                         return "servingConfigExperiment." + error;
                                 }
@@ -171463,14 +178805,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ExperimentInfo} ExperimentInfo
                          */
-                        ExperimentInfo.fromObject = function fromObject(object) {
+                        ExperimentInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ExperimentInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ExperimentInfo();
                             if (object.servingConfigExperiment != null) {
                                 if (typeof object.servingConfigExperiment !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ExperimentInfo.servingConfigExperiment: object expected");
-                                message.servingConfigExperiment = $root.google.cloud.retail.v2beta.ExperimentInfo.ServingConfigExperiment.fromObject(object.servingConfigExperiment);
+                                message.servingConfigExperiment = $root.google.cloud.retail.v2beta.ExperimentInfo.ServingConfigExperiment.fromObject(object.servingConfigExperiment, long + 1);
                             }
                             if (object.experiment != null)
                                 message.experiment = String(object.experiment);
@@ -171549,7 +178895,7 @@
                             function ServingConfigExperiment(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -171624,9 +178970,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ServingConfigExperiment.decode = function decode(reader, length, error) {
+                            ServingConfigExperiment.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ExperimentInfo.ServingConfigExperiment();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -171642,7 +178992,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -171673,9 +179023,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ServingConfigExperiment.verify = function verify(message) {
+                            ServingConfigExperiment.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.originalServingConfig != null && message.hasOwnProperty("originalServingConfig"))
                                     if (!$util.isString(message.originalServingConfig))
                                         return "originalServingConfig: string expected";
@@ -171693,9 +179047,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.ExperimentInfo.ServingConfigExperiment} ServingConfigExperiment
                              */
-                            ServingConfigExperiment.fromObject = function fromObject(object) {
+                            ServingConfigExperiment.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.ExperimentInfo.ServingConfigExperiment)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.ExperimentInfo.ServingConfigExperiment();
                                 if (object.originalServingConfig != null)
                                     message.originalServingConfig = String(object.originalServingConfig);
@@ -171982,7 +179340,7 @@
                         function CreateControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -172067,9 +179425,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateControlRequest.decode = function decode(reader, length, error) {
+                        CreateControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CreateControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -172081,7 +179443,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.control = $root.google.cloud.retail.v2beta.Control.decode(reader, reader.uint32());
+                                        message.control = $root.google.cloud.retail.v2beta.Control.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -172089,7 +179451,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -172120,14 +179482,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateControlRequest.verify = function verify(message) {
+                        CreateControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.control != null && message.hasOwnProperty("control")) {
-                                var error = $root.google.cloud.retail.v2beta.Control.verify(message.control);
+                                var error = $root.google.cloud.retail.v2beta.Control.verify(message.control, long + 1);
                                 if (error)
                                     return "control." + error;
                             }
@@ -172145,16 +179511,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CreateControlRequest} CreateControlRequest
                          */
-                        CreateControlRequest.fromObject = function fromObject(object) {
+                        CreateControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CreateControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CreateControlRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.control != null) {
                                 if (typeof object.control !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.CreateControlRequest.control: object expected");
-                                message.control = $root.google.cloud.retail.v2beta.Control.fromObject(object.control);
+                                message.control = $root.google.cloud.retail.v2beta.Control.fromObject(object.control, long + 1);
                             }
                             if (object.controlId != null)
                                 message.controlId = String(object.controlId);
@@ -172238,7 +179608,7 @@
                         function UpdateControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -172313,9 +179683,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateControlRequest.decode = function decode(reader, length, error) {
+                        UpdateControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UpdateControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -172323,15 +179697,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.control = $root.google.cloud.retail.v2beta.Control.decode(reader, reader.uint32());
+                                        message.control = $root.google.cloud.retail.v2beta.Control.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -172362,16 +179736,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateControlRequest.verify = function verify(message) {
+                        UpdateControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.control != null && message.hasOwnProperty("control")) {
-                                var error = $root.google.cloud.retail.v2beta.Control.verify(message.control);
+                                var error = $root.google.cloud.retail.v2beta.Control.verify(message.control, long + 1);
                                 if (error)
                                     return "control." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -172386,19 +179764,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UpdateControlRequest} UpdateControlRequest
                          */
-                        UpdateControlRequest.fromObject = function fromObject(object) {
+                        UpdateControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UpdateControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UpdateControlRequest();
                             if (object.control != null) {
                                 if (typeof object.control !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateControlRequest.control: object expected");
-                                message.control = $root.google.cloud.retail.v2beta.Control.fromObject(object.control);
+                                message.control = $root.google.cloud.retail.v2beta.Control.fromObject(object.control, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateControlRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -172476,7 +179858,7 @@
                         function DeleteControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -172541,9 +179923,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteControlRequest.decode = function decode(reader, length, error) {
+                        DeleteControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.DeleteControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -172555,7 +179941,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -172586,9 +179972,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteControlRequest.verify = function verify(message) {
+                        DeleteControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -172603,9 +179993,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.DeleteControlRequest} DeleteControlRequest
                          */
-                        DeleteControlRequest.fromObject = function fromObject(object) {
+                        DeleteControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.DeleteControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.DeleteControlRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -172681,7 +180075,7 @@
                         function GetControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -172746,9 +180140,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetControlRequest.decode = function decode(reader, length, error) {
+                        GetControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GetControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -172760,7 +180158,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -172791,9 +180189,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetControlRequest.verify = function verify(message) {
+                        GetControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -172808,9 +180210,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GetControlRequest} GetControlRequest
                          */
-                        GetControlRequest.fromObject = function fromObject(object) {
+                        GetControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GetControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GetControlRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -172889,7 +180295,7 @@
                         function ListControlsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -172984,9 +180390,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListControlsRequest.decode = function decode(reader, length, error) {
+                        ListControlsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListControlsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -173010,7 +180420,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -173041,9 +180451,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListControlsRequest.verify = function verify(message) {
+                        ListControlsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -173067,9 +180481,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListControlsRequest} ListControlsRequest
                          */
-                        ListControlsRequest.fromObject = function fromObject(object) {
+                        ListControlsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListControlsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListControlsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -173163,7 +180581,7 @@
                             this.controls = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -173239,9 +180657,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListControlsResponse.decode = function decode(reader, length, error) {
+                        ListControlsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListControlsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -173251,7 +180673,7 @@
                                 case 1: {
                                         if (!(message.controls && message.controls.length))
                                             message.controls = [];
-                                        message.controls.push($root.google.cloud.retail.v2beta.Control.decode(reader, reader.uint32()));
+                                        message.controls.push($root.google.cloud.retail.v2beta.Control.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -173259,7 +180681,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -173290,14 +180712,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListControlsResponse.verify = function verify(message) {
+                        ListControlsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.controls != null && message.hasOwnProperty("controls")) {
                                 if (!Array.isArray(message.controls))
                                     return "controls: array expected";
                                 for (var i = 0; i < message.controls.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Control.verify(message.controls[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Control.verify(message.controls[i], long + 1);
                                     if (error)
                                         return "controls." + error;
                                 }
@@ -173316,9 +180742,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListControlsResponse} ListControlsResponse
                          */
-                        ListControlsResponse.fromObject = function fromObject(object) {
+                        ListControlsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListControlsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListControlsResponse();
                             if (object.controls) {
                                 if (!Array.isArray(object.controls))
@@ -173327,7 +180757,7 @@
                                 for (var i = 0; i < object.controls.length; ++i) {
                                     if (typeof object.controls[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ListControlsResponse.controls: object expected");
-                                    message.controls[i] = $root.google.cloud.retail.v2beta.Control.fromObject(object.controls[i]);
+                                    message.controls[i] = $root.google.cloud.retail.v2beta.Control.fromObject(object.controls[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -173492,7 +180922,7 @@
                             this.safetySettings = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -173660,9 +181090,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ConversationalSearchRequest.decode = function decode(reader, length, error) {
+                        ConversationalSearchRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchRequest(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -173692,7 +181126,7 @@
                                         break;
                                     }
                                 case 6: {
-                                        message.searchParams = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams.decode(reader, reader.uint32());
+                                        message.searchParams = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
@@ -173700,11 +181134,11 @@
                                         break;
                                     }
                                 case 7: {
-                                        message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.decode(reader, reader.uint32());
+                                        message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.conversationalFilteringSpec = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec.decode(reader, reader.uint32());
+                                        message.conversationalFilteringSpec = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 12: {
@@ -173723,21 +181157,23 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.userLabels, key);
                                         message.userLabels[key] = value;
                                         break;
                                     }
                                 case 14: {
                                         if (!(message.safetySettings && message.safetySettings.length))
                                             message.safetySettings = [];
-                                        message.safetySettings.push($root.google.cloud.retail.v2beta.SafetySetting.decode(reader, reader.uint32()));
+                                        message.safetySettings.push($root.google.cloud.retail.v2beta.SafetySetting.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -173768,9 +181204,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ConversationalSearchRequest.verify = function verify(message) {
+                        ConversationalSearchRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.placement != null && message.hasOwnProperty("placement"))
                                 if (!$util.isString(message.placement))
                                     return "placement: string expected";
@@ -173791,7 +181231,7 @@
                                 if (!$util.isString(message.conversationId))
                                     return "conversationId: string expected";
                             if (message.searchParams != null && message.hasOwnProperty("searchParams")) {
-                                var error = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams.verify(message.searchParams);
+                                var error = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams.verify(message.searchParams, long + 1);
                                 if (error)
                                     return "searchParams." + error;
                             }
@@ -173799,12 +181239,12 @@
                                 if (!$util.isString(message.visitorId))
                                     return "visitorId: string expected";
                             if (message.userInfo != null && message.hasOwnProperty("userInfo")) {
-                                var error = $root.google.cloud.retail.v2beta.UserInfo.verify(message.userInfo);
+                                var error = $root.google.cloud.retail.v2beta.UserInfo.verify(message.userInfo, long + 1);
                                 if (error)
                                     return "userInfo." + error;
                             }
                             if (message.conversationalFilteringSpec != null && message.hasOwnProperty("conversationalFilteringSpec")) {
-                                var error = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec.verify(message.conversationalFilteringSpec);
+                                var error = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec.verify(message.conversationalFilteringSpec, long + 1);
                                 if (error)
                                     return "conversationalFilteringSpec." + error;
                             }
@@ -173820,7 +181260,7 @@
                                 if (!Array.isArray(message.safetySettings))
                                     return "safetySettings: array expected";
                                 for (var i = 0; i < message.safetySettings.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.SafetySetting.verify(message.safetySettings[i]);
+                                    var error = $root.google.cloud.retail.v2beta.SafetySetting.verify(message.safetySettings[i], long + 1);
                                     if (error)
                                         return "safetySettings." + error;
                                 }
@@ -173836,9 +181276,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ConversationalSearchRequest} ConversationalSearchRequest
                          */
-                        ConversationalSearchRequest.fromObject = function fromObject(object) {
+                        ConversationalSearchRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ConversationalSearchRequest();
                             if (object.placement != null)
                                 message.placement = String(object.placement);
@@ -173858,26 +181302,29 @@
                             if (object.searchParams != null) {
                                 if (typeof object.searchParams !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchRequest.searchParams: object expected");
-                                message.searchParams = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams.fromObject(object.searchParams);
+                                message.searchParams = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams.fromObject(object.searchParams, long + 1);
                             }
                             if (object.visitorId != null)
                                 message.visitorId = String(object.visitorId);
                             if (object.userInfo != null) {
                                 if (typeof object.userInfo !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchRequest.userInfo: object expected");
-                                message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.fromObject(object.userInfo);
+                                message.userInfo = $root.google.cloud.retail.v2beta.UserInfo.fromObject(object.userInfo, long + 1);
                             }
                             if (object.conversationalFilteringSpec != null) {
                                 if (typeof object.conversationalFilteringSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchRequest.conversationalFilteringSpec: object expected");
-                                message.conversationalFilteringSpec = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec.fromObject(object.conversationalFilteringSpec);
+                                message.conversationalFilteringSpec = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec.fromObject(object.conversationalFilteringSpec, long + 1);
                             }
                             if (object.userLabels) {
                                 if (typeof object.userLabels !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchRequest.userLabels: object expected");
                                 message.userLabels = {};
-                                for (var keys = Object.keys(object.userLabels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.userLabels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.userLabels, keys[i]);
                                     message.userLabels[keys[i]] = String(object.userLabels[keys[i]]);
+                                }
                             }
                             if (object.safetySettings) {
                                 if (!Array.isArray(object.safetySettings))
@@ -173886,7 +181333,7 @@
                                 for (var i = 0; i < object.safetySettings.length; ++i) {
                                     if (typeof object.safetySettings[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchRequest.safetySettings: object expected");
-                                    message.safetySettings[i] = $root.google.cloud.retail.v2beta.SafetySetting.fromObject(object.safetySettings[i]);
+                                    message.safetySettings[i] = $root.google.cloud.retail.v2beta.SafetySetting.fromObject(object.safetySettings[i], long + 1);
                                 }
                             }
                             return message;
@@ -173945,8 +181392,11 @@
                             var keys2;
                             if (message.userLabels && (keys2 = Object.keys(message.userLabels)).length) {
                                 object.userLabels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.userLabels, keys2[j]);
                                     object.userLabels[keys2[j]] = message.userLabels[keys2[j]];
+                                }
                             }
                             if (message.safetySettings && message.safetySettings.length) {
                                 object.safetySettings = [];
@@ -174005,7 +181455,7 @@
                             function SearchParams(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -174100,9 +181550,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            SearchParams.decode = function decode(reader, length, error) {
+                            SearchParams.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -174122,11 +181576,11 @@
                                             break;
                                         }
                                     case 4: {
-                                            message.boostSpec = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.decode(reader, reader.uint32());
+                                            message.boostSpec = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -174157,9 +181611,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            SearchParams.verify = function verify(message) {
+                            SearchParams.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.filter != null && message.hasOwnProperty("filter"))
                                     if (!$util.isString(message.filter))
                                         return "filter: string expected";
@@ -174170,7 +181628,7 @@
                                     if (!$util.isString(message.sortBy))
                                         return "sortBy: string expected";
                                 if (message.boostSpec != null && message.hasOwnProperty("boostSpec")) {
-                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.verify(message.boostSpec);
+                                    var error = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.verify(message.boostSpec, long + 1);
                                     if (error)
                                         return "boostSpec." + error;
                                 }
@@ -174185,9 +181643,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams} SearchParams
                              */
-                            SearchParams.fromObject = function fromObject(object) {
+                            SearchParams.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams();
                                 if (object.filter != null)
                                     message.filter = String(object.filter);
@@ -174198,7 +181660,7 @@
                                 if (object.boostSpec != null) {
                                     if (typeof object.boostSpec !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchRequest.SearchParams.boostSpec: object expected");
-                                    message.boostSpec = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.fromObject(object.boostSpec);
+                                    message.boostSpec = $root.google.cloud.retail.v2beta.SearchRequest.BoostSpec.fromObject(object.boostSpec, long + 1);
                                 }
                                 return message;
                             };
@@ -174283,7 +181745,7 @@
                             function UserAnswer(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -174372,9 +181834,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            UserAnswer.decode = function decode(reader, length, error) {
+                            UserAnswer.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -174386,11 +181852,11 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.selectedAnswer = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer.decode(reader, reader.uint32());
+                                            message.selectedAnswer = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -174421,9 +181887,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            UserAnswer.verify = function verify(message) {
+                            UserAnswer.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.textAnswer != null && message.hasOwnProperty("textAnswer")) {
                                     properties.type = 1;
@@ -174435,7 +181905,7 @@
                                         return "type: multiple values";
                                     properties.type = 1;
                                     {
-                                        var error = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer.verify(message.selectedAnswer);
+                                        var error = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer.verify(message.selectedAnswer, long + 1);
                                         if (error)
                                             return "selectedAnswer." + error;
                                     }
@@ -174451,16 +181921,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer} UserAnswer
                              */
-                            UserAnswer.fromObject = function fromObject(object) {
+                            UserAnswer.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer();
                                 if (object.textAnswer != null)
                                     message.textAnswer = String(object.textAnswer);
                                 if (object.selectedAnswer != null) {
                                     if (typeof object.selectedAnswer !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.selectedAnswer: object expected");
-                                    message.selectedAnswer = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer);
+                                    message.selectedAnswer = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer.fromObject(object.selectedAnswer, long + 1);
                                 }
                                 return message;
                             };
@@ -174537,7 +182011,7 @@
                                 function SelectedAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -174602,9 +182076,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                SelectedAnswer.decode = function decode(reader, length, error) {
+                                SelectedAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -174612,11 +182090,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -174647,11 +182125,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                SelectedAnswer.verify = function verify(message) {
+                                SelectedAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -174666,14 +182148,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer} SelectedAnswer
                                  */
-                                SelectedAnswer.fromObject = function fromObject(object) {
+                                SelectedAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.SelectedAnswer.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -174752,7 +182238,7 @@
                             function ConversationalFilteringSpec(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -174837,9 +182323,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalFilteringSpec.decode = function decode(reader, length, error) {
+                            ConversationalFilteringSpec.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -174851,7 +182341,7 @@
                                             break;
                                         }
                                     case 2: {
-                                            message.userAnswer = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.decode(reader, reader.uint32());
+                                            message.userAnswer = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 4: {
@@ -174859,7 +182349,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -174890,14 +182380,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalFilteringSpec.verify = function verify(message) {
+                            ConversationalFilteringSpec.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.enableConversationalFiltering != null && message.hasOwnProperty("enableConversationalFiltering"))
                                     if (typeof message.enableConversationalFiltering !== "boolean")
                                         return "enableConversationalFiltering: boolean expected";
                                 if (message.userAnswer != null && message.hasOwnProperty("userAnswer")) {
-                                    var error = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.verify(message.userAnswer);
+                                    var error = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.verify(message.userAnswer, long + 1);
                                     if (error)
                                         return "userAnswer." + error;
                                 }
@@ -174922,16 +182416,20 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec} ConversationalFilteringSpec
                              */
-                            ConversationalFilteringSpec.fromObject = function fromObject(object) {
+                            ConversationalFilteringSpec.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec();
                                 if (object.enableConversationalFiltering != null)
                                     message.enableConversationalFiltering = Boolean(object.enableConversationalFiltering);
                                 if (object.userAnswer != null) {
                                     if (typeof object.userAnswer !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchRequest.ConversationalFilteringSpec.userAnswer: object expected");
-                                    message.userAnswer = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.fromObject(object.userAnswer);
+                                    message.userAnswer = $root.google.cloud.retail.v2beta.ConversationalSearchRequest.UserAnswer.fromObject(object.userAnswer, long + 1);
                                 }
                                 switch (object.conversationalFilteringMode) {
                                 default:
@@ -175065,7 +182563,7 @@
                             this.refinedSearch = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -175192,9 +182690,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ConversationalSearchResponse.decode = function decode(reader, length, error) {
+                        ConversationalSearchResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -175212,7 +182714,7 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.followupQuestion = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32());
+                                        message.followupQuestion = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
@@ -175222,11 +182724,11 @@
                                 case 6: {
                                         if (!(message.refinedSearch && message.refinedSearch.length))
                                             message.refinedSearch = [];
-                                        message.refinedSearch.push($root.google.cloud.retail.v2beta.ConversationalSearchResponse.RefinedSearch.decode(reader, reader.uint32()));
+                                        message.refinedSearch.push($root.google.cloud.retail.v2beta.ConversationalSearchResponse.RefinedSearch.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 7: {
-                                        message.conversationalFilteringResult = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.decode(reader, reader.uint32());
+                                        message.conversationalFilteringResult = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
@@ -175234,7 +182736,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -175265,9 +182767,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ConversationalSearchResponse.verify = function verify(message) {
+                        ConversationalSearchResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.userQueryTypes != null && message.hasOwnProperty("userQueryTypes")) {
                                 if (!Array.isArray(message.userQueryTypes))
                                     return "userQueryTypes: array expected";
@@ -175279,7 +182785,7 @@
                                 if (!$util.isString(message.conversationalTextResponse))
                                     return "conversationalTextResponse: string expected";
                             if (message.followupQuestion != null && message.hasOwnProperty("followupQuestion")) {
-                                var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion);
+                                var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion, long + 1);
                                 if (error)
                                     return "followupQuestion." + error;
                             }
@@ -175290,13 +182796,13 @@
                                 if (!Array.isArray(message.refinedSearch))
                                     return "refinedSearch: array expected";
                                 for (var i = 0; i < message.refinedSearch.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.RefinedSearch.verify(message.refinedSearch[i]);
+                                    var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.RefinedSearch.verify(message.refinedSearch[i], long + 1);
                                     if (error)
                                         return "refinedSearch." + error;
                                 }
                             }
                             if (message.conversationalFilteringResult != null && message.hasOwnProperty("conversationalFilteringResult")) {
-                                var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.verify(message.conversationalFilteringResult);
+                                var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.verify(message.conversationalFilteringResult, long + 1);
                                 if (error)
                                     return "conversationalFilteringResult." + error;
                             }
@@ -175320,9 +182826,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ConversationalSearchResponse} ConversationalSearchResponse
                          */
-                        ConversationalSearchResponse.fromObject = function fromObject(object) {
+                        ConversationalSearchResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse();
                             if (object.userQueryTypes) {
                                 if (!Array.isArray(object.userQueryTypes))
@@ -175336,7 +182846,7 @@
                             if (object.followupQuestion != null) {
                                 if (typeof object.followupQuestion !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchResponse.followupQuestion: object expected");
-                                message.followupQuestion = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion);
+                                message.followupQuestion = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion, long + 1);
                             }
                             if (object.conversationId != null)
                                 message.conversationId = String(object.conversationId);
@@ -175347,13 +182857,13 @@
                                 for (var i = 0; i < object.refinedSearch.length; ++i) {
                                     if (typeof object.refinedSearch[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchResponse.refinedSearch: object expected");
-                                    message.refinedSearch[i] = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.RefinedSearch.fromObject(object.refinedSearch[i]);
+                                    message.refinedSearch[i] = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.RefinedSearch.fromObject(object.refinedSearch[i], long + 1);
                                 }
                             }
                             if (object.conversationalFilteringResult != null) {
                                 if (typeof object.conversationalFilteringResult !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchResponse.conversationalFilteringResult: object expected");
-                                message.conversationalFilteringResult = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.fromObject(object.conversationalFilteringResult);
+                                message.conversationalFilteringResult = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.fromObject(object.conversationalFilteringResult, long + 1);
                             }
                             switch (object.state) {
                             default:
@@ -175473,7 +182983,7 @@
                                 this.suggestedAnswers = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -175549,9 +183059,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FollowupQuestion.decode = function decode(reader, length, error) {
+                            FollowupQuestion.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -175565,11 +183079,11 @@
                                     case 2: {
                                             if (!(message.suggestedAnswers && message.suggestedAnswers.length))
                                                 message.suggestedAnswers = [];
-                                            message.suggestedAnswers.push($root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.decode(reader, reader.uint32()));
+                                            message.suggestedAnswers.push($root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -175600,9 +183114,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FollowupQuestion.verify = function verify(message) {
+                            FollowupQuestion.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.followupQuestion != null && message.hasOwnProperty("followupQuestion"))
                                     if (!$util.isString(message.followupQuestion))
                                         return "followupQuestion: string expected";
@@ -175610,7 +183128,7 @@
                                     if (!Array.isArray(message.suggestedAnswers))
                                         return "suggestedAnswers: array expected";
                                     for (var i = 0; i < message.suggestedAnswers.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.verify(message.suggestedAnswers[i]);
+                                        var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.verify(message.suggestedAnswers[i], long + 1);
                                         if (error)
                                             return "suggestedAnswers." + error;
                                     }
@@ -175626,9 +183144,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion} FollowupQuestion
                              */
-                            FollowupQuestion.fromObject = function fromObject(object) {
+                            FollowupQuestion.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion();
                                 if (object.followupQuestion != null)
                                     message.followupQuestion = String(object.followupQuestion);
@@ -175639,7 +183161,7 @@
                                     for (var i = 0; i < object.suggestedAnswers.length; ++i) {
                                         if (typeof object.suggestedAnswers[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.suggestedAnswers: object expected");
-                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.fromObject(object.suggestedAnswers[i]);
+                                        message.suggestedAnswers[i] = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.fromObject(object.suggestedAnswers[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -175718,7 +183240,7 @@
                                 function SuggestedAnswer(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -175783,9 +183305,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                SuggestedAnswer.decode = function decode(reader, length, error) {
+                                SuggestedAnswer.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -175793,11 +183319,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -175828,11 +183354,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                SuggestedAnswer.verify = function verify(message) {
+                                SuggestedAnswer.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -175847,14 +183377,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer} SuggestedAnswer
                                  */
-                                SuggestedAnswer.fromObject = function fromObject(object) {
+                                SuggestedAnswer.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -175931,7 +183465,7 @@
                             function RefinedSearch(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -175996,9 +183530,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            RefinedSearch.decode = function decode(reader, length, error) {
+                            RefinedSearch.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse.RefinedSearch();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -176010,7 +183548,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -176041,9 +183579,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            RefinedSearch.verify = function verify(message) {
+                            RefinedSearch.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.query != null && message.hasOwnProperty("query"))
                                     if (!$util.isString(message.query))
                                         return "query: string expected";
@@ -176058,9 +183600,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.ConversationalSearchResponse.RefinedSearch} RefinedSearch
                              */
-                            RefinedSearch.fromObject = function fromObject(object) {
+                            RefinedSearch.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchResponse.RefinedSearch)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse.RefinedSearch();
                                 if (object.query != null)
                                     message.query = String(object.query);
@@ -176137,7 +183683,7 @@
                             function ConversationalFilteringResult(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -176212,9 +183758,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ConversationalFilteringResult.decode = function decode(reader, length, error) {
+                            ConversationalFilteringResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -176222,15 +183772,15 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.followupQuestion = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32());
+                                            message.followupQuestion = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     case 2: {
-                                            message.additionalFilter = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.decode(reader, reader.uint32());
+                                            message.additionalFilter = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -176261,16 +183811,20 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ConversationalFilteringResult.verify = function verify(message) {
+                            ConversationalFilteringResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.followupQuestion != null && message.hasOwnProperty("followupQuestion")) {
-                                    var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion);
+                                    var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.verify(message.followupQuestion, long + 1);
                                     if (error)
                                         return "followupQuestion." + error;
                                 }
                                 if (message.additionalFilter != null && message.hasOwnProperty("additionalFilter")) {
-                                    var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.verify(message.additionalFilter);
+                                    var error = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.verify(message.additionalFilter, long + 1);
                                     if (error)
                                         return "additionalFilter." + error;
                                 }
@@ -176285,19 +183839,23 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult} ConversationalFilteringResult
                              */
-                            ConversationalFilteringResult.fromObject = function fromObject(object) {
+                            ConversationalFilteringResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult();
                                 if (object.followupQuestion != null) {
                                     if (typeof object.followupQuestion !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.followupQuestion: object expected");
-                                    message.followupQuestion = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion);
+                                    message.followupQuestion = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.FollowupQuestion.fromObject(object.followupQuestion, long + 1);
                                 }
                                 if (object.additionalFilter != null) {
                                     if (typeof object.additionalFilter !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.additionalFilter: object expected");
-                                    message.additionalFilter = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.fromObject(object.additionalFilter);
+                                    message.additionalFilter = $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.fromObject(object.additionalFilter, long + 1);
                                 }
                                 return message;
                             };
@@ -176372,7 +183930,7 @@
                                 function AdditionalFilter(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -176437,9 +183995,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                AdditionalFilter.decode = function decode(reader, length, error) {
+                                AdditionalFilter.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -176447,11 +184009,11 @@
                                             break;
                                         switch (tag >>> 3) {
                                         case 1: {
-                                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32());
+                                                message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -176482,11 +184044,15 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                AdditionalFilter.verify = function verify(message) {
+                                AdditionalFilter.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.productAttributeValue != null && message.hasOwnProperty("productAttributeValue")) {
-                                        var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue);
+                                        var error = $root.google.cloud.retail.v2beta.ProductAttributeValue.verify(message.productAttributeValue, long + 1);
                                         if (error)
                                             return "productAttributeValue." + error;
                                     }
@@ -176501,14 +184067,18 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter} AdditionalFilter
                                  */
-                                AdditionalFilter.fromObject = function fromObject(object) {
+                                AdditionalFilter.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter();
                                     if (object.productAttributeValue != null) {
                                         if (typeof object.productAttributeValue !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.ConversationalSearchResponse.ConversationalFilteringResult.AdditionalFilter.productAttributeValue: object expected");
-                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue);
+                                        message.productAttributeValue = $root.google.cloud.retail.v2beta.ProductAttributeValue.fromObject(object.productAttributeValue, long + 1);
                                     }
                                     return message;
                                 };
@@ -176628,7 +184198,7 @@
                         function SafetySetting(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -176713,9 +184283,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SafetySetting.decode = function decode(reader, length, error) {
+                        SafetySetting.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SafetySetting();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -176735,7 +184309,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -176766,9 +184340,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SafetySetting.verify = function verify(message) {
+                        SafetySetting.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.category != null && message.hasOwnProperty("category"))
                                 switch (message.category) {
                                 default:
@@ -176813,9 +184391,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.SafetySetting} SafetySetting
                          */
-                        SafetySetting.fromObject = function fromObject(object) {
+                        SafetySetting.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.SafetySetting)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.SafetySetting();
                             switch (object.category) {
                             default:
@@ -177020,7 +184602,7 @@
                         function GenerativeQuestionsFeatureConfig(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -177105,9 +184687,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GenerativeQuestionsFeatureConfig.decode = function decode(reader, length, error) {
+                        GenerativeQuestionsFeatureConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GenerativeQuestionsFeatureConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -177127,7 +184713,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -177158,9 +184744,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GenerativeQuestionsFeatureConfig.verify = function verify(message) {
+                        GenerativeQuestionsFeatureConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -177181,9 +184771,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GenerativeQuestionsFeatureConfig} GenerativeQuestionsFeatureConfig
                          */
-                        GenerativeQuestionsFeatureConfig.fromObject = function fromObject(object) {
+                        GenerativeQuestionsFeatureConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GenerativeQuestionsFeatureConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GenerativeQuestionsFeatureConfig();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -177277,7 +184871,7 @@
                             this.exampleValues = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -177403,9 +184997,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GenerativeQuestionConfig.decode = function decode(reader, length, error) {
+                        GenerativeQuestionConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GenerativeQuestionConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -177443,7 +185041,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -177474,9 +185072,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GenerativeQuestionConfig.verify = function verify(message) {
+                        GenerativeQuestionConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -177513,9 +185115,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GenerativeQuestionConfig} GenerativeQuestionConfig
                          */
-                        GenerativeQuestionConfig.fromObject = function fromObject(object) {
+                        GenerativeQuestionConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GenerativeQuestionConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GenerativeQuestionConfig();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -177832,7 +185438,7 @@
                         function UpdateGenerativeQuestionsFeatureConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -177907,9 +185513,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UpdateGenerativeQuestionsFeatureConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -177917,15 +185527,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2beta.GenerativeQuestionsFeatureConfig.decode(reader, reader.uint32());
+                                        message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2beta.GenerativeQuestionsFeatureConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -177956,16 +185566,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateGenerativeQuestionsFeatureConfigRequest.verify = function verify(message) {
+                        UpdateGenerativeQuestionsFeatureConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionsFeatureConfig != null && message.hasOwnProperty("generativeQuestionsFeatureConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.GenerativeQuestionsFeatureConfig.verify(message.generativeQuestionsFeatureConfig);
+                                var error = $root.google.cloud.retail.v2beta.GenerativeQuestionsFeatureConfig.verify(message.generativeQuestionsFeatureConfig, long + 1);
                                 if (error)
                                     return "generativeQuestionsFeatureConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -177980,19 +185594,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UpdateGenerativeQuestionsFeatureConfigRequest} UpdateGenerativeQuestionsFeatureConfigRequest
                          */
-                        UpdateGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object) {
+                        UpdateGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UpdateGenerativeQuestionsFeatureConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UpdateGenerativeQuestionsFeatureConfigRequest();
                             if (object.generativeQuestionsFeatureConfig != null) {
                                 if (typeof object.generativeQuestionsFeatureConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateGenerativeQuestionsFeatureConfigRequest.generativeQuestionsFeatureConfig: object expected");
-                                message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2beta.GenerativeQuestionsFeatureConfig.fromObject(object.generativeQuestionsFeatureConfig);
+                                message.generativeQuestionsFeatureConfig = $root.google.cloud.retail.v2beta.GenerativeQuestionsFeatureConfig.fromObject(object.generativeQuestionsFeatureConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateGenerativeQuestionsFeatureConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -178070,7 +185688,7 @@
                         function GetGenerativeQuestionsFeatureConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -178135,9 +185753,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error) {
+                        GetGenerativeQuestionsFeatureConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GetGenerativeQuestionsFeatureConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -178149,7 +185771,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -178180,9 +185802,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetGenerativeQuestionsFeatureConfigRequest.verify = function verify(message) {
+                        GetGenerativeQuestionsFeatureConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.catalog != null && message.hasOwnProperty("catalog"))
                                 if (!$util.isString(message.catalog))
                                     return "catalog: string expected";
@@ -178197,9 +185823,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GetGenerativeQuestionsFeatureConfigRequest} GetGenerativeQuestionsFeatureConfigRequest
                          */
-                        GetGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object) {
+                        GetGenerativeQuestionsFeatureConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GetGenerativeQuestionsFeatureConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GetGenerativeQuestionsFeatureConfigRequest();
                             if (object.catalog != null)
                                 message.catalog = String(object.catalog);
@@ -178275,7 +185905,7 @@
                         function ListGenerativeQuestionConfigsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -178340,9 +185970,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error) {
+                        ListGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListGenerativeQuestionConfigsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -178354,7 +185988,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -178385,9 +186019,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListGenerativeQuestionConfigsRequest.verify = function verify(message) {
+                        ListGenerativeQuestionConfigsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -178402,9 +186040,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListGenerativeQuestionConfigsRequest} ListGenerativeQuestionConfigsRequest
                          */
-                        ListGenerativeQuestionConfigsRequest.fromObject = function fromObject(object) {
+                        ListGenerativeQuestionConfigsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListGenerativeQuestionConfigsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListGenerativeQuestionConfigsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -178481,7 +186123,7 @@
                             this.generativeQuestionConfigs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -178547,9 +186189,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error) {
+                        ListGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListGenerativeQuestionConfigsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -178559,11 +186205,11 @@
                                 case 1: {
                                         if (!(message.generativeQuestionConfigs && message.generativeQuestionConfigs.length))
                                             message.generativeQuestionConfigs = [];
-                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2beta.GenerativeQuestionConfig.decode(reader, reader.uint32()));
+                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2beta.GenerativeQuestionConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -178594,14 +186240,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListGenerativeQuestionConfigsResponse.verify = function verify(message) {
+                        ListGenerativeQuestionConfigsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionConfigs != null && message.hasOwnProperty("generativeQuestionConfigs")) {
                                 if (!Array.isArray(message.generativeQuestionConfigs))
                                     return "generativeQuestionConfigs: array expected";
                                 for (var i = 0; i < message.generativeQuestionConfigs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i]);
+                                    var error = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i], long + 1);
                                     if (error)
                                         return "generativeQuestionConfigs." + error;
                                 }
@@ -178617,9 +186267,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListGenerativeQuestionConfigsResponse} ListGenerativeQuestionConfigsResponse
                          */
-                        ListGenerativeQuestionConfigsResponse.fromObject = function fromObject(object) {
+                        ListGenerativeQuestionConfigsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListGenerativeQuestionConfigsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListGenerativeQuestionConfigsResponse();
                             if (object.generativeQuestionConfigs) {
                                 if (!Array.isArray(object.generativeQuestionConfigs))
@@ -178628,7 +186282,7 @@
                                 for (var i = 0; i < object.generativeQuestionConfigs.length; ++i) {
                                     if (typeof object.generativeQuestionConfigs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ListGenerativeQuestionConfigsResponse.generativeQuestionConfigs: object expected");
-                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i]);
+                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i], long + 1);
                                 }
                             }
                             return message;
@@ -178707,7 +186361,7 @@
                         function UpdateGenerativeQuestionConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -178782,9 +186436,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateGenerativeQuestionConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateGenerativeQuestionConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -178792,15 +186450,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 3: {
-                                        message.generativeQuestionConfig = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.decode(reader, reader.uint32());
+                                        message.generativeQuestionConfig = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -178831,16 +186489,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateGenerativeQuestionConfigRequest.verify = function verify(message) {
+                        UpdateGenerativeQuestionConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionConfig != null && message.hasOwnProperty("generativeQuestionConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.verify(message.generativeQuestionConfig);
+                                var error = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.verify(message.generativeQuestionConfig, long + 1);
                                 if (error)
                                     return "generativeQuestionConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -178855,19 +186517,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest} UpdateGenerativeQuestionConfigRequest
                          */
-                        UpdateGenerativeQuestionConfigRequest.fromObject = function fromObject(object) {
+                        UpdateGenerativeQuestionConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest();
                             if (object.generativeQuestionConfig != null) {
                                 if (typeof object.generativeQuestionConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest.generativeQuestionConfig: object expected");
-                                message.generativeQuestionConfig = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfig);
+                                message.generativeQuestionConfig = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -178947,7 +186613,7 @@
                             this.requests = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -179023,9 +186689,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BatchUpdateGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error) {
+                        BatchUpdateGenerativeQuestionConfigsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.BatchUpdateGenerativeQuestionConfigsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -179039,11 +186709,11 @@
                                 case 2: {
                                         if (!(message.requests && message.requests.length))
                                             message.requests = [];
-                                        message.requests.push($root.google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest.decode(reader, reader.uint32()));
+                                        message.requests.push($root.google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -179074,9 +186744,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BatchUpdateGenerativeQuestionConfigsRequest.verify = function verify(message) {
+                        BatchUpdateGenerativeQuestionConfigsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -179084,7 +186758,7 @@
                                 if (!Array.isArray(message.requests))
                                     return "requests: array expected";
                                 for (var i = 0; i < message.requests.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest.verify(message.requests[i]);
+                                    var error = $root.google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest.verify(message.requests[i], long + 1);
                                     if (error)
                                         return "requests." + error;
                                 }
@@ -179100,9 +186774,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.BatchUpdateGenerativeQuestionConfigsRequest} BatchUpdateGenerativeQuestionConfigsRequest
                          */
-                        BatchUpdateGenerativeQuestionConfigsRequest.fromObject = function fromObject(object) {
+                        BatchUpdateGenerativeQuestionConfigsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.BatchUpdateGenerativeQuestionConfigsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.BatchUpdateGenerativeQuestionConfigsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -179113,7 +186791,7 @@
                                 for (var i = 0; i < object.requests.length; ++i) {
                                     if (typeof object.requests[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.BatchUpdateGenerativeQuestionConfigsRequest.requests: object expected");
-                                    message.requests[i] = $root.google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest.fromObject(object.requests[i]);
+                                    message.requests[i] = $root.google.cloud.retail.v2beta.UpdateGenerativeQuestionConfigRequest.fromObject(object.requests[i], long + 1);
                                 }
                             }
                             return message;
@@ -179196,7 +186874,7 @@
                             this.generativeQuestionConfigs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -179262,9 +186940,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BatchUpdateGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error) {
+                        BatchUpdateGenerativeQuestionConfigsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.BatchUpdateGenerativeQuestionConfigsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -179274,11 +186956,11 @@
                                 case 1: {
                                         if (!(message.generativeQuestionConfigs && message.generativeQuestionConfigs.length))
                                             message.generativeQuestionConfigs = [];
-                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2beta.GenerativeQuestionConfig.decode(reader, reader.uint32()));
+                                        message.generativeQuestionConfigs.push($root.google.cloud.retail.v2beta.GenerativeQuestionConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -179309,14 +186991,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BatchUpdateGenerativeQuestionConfigsResponse.verify = function verify(message) {
+                        BatchUpdateGenerativeQuestionConfigsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.generativeQuestionConfigs != null && message.hasOwnProperty("generativeQuestionConfigs")) {
                                 if (!Array.isArray(message.generativeQuestionConfigs))
                                     return "generativeQuestionConfigs: array expected";
                                 for (var i = 0; i < message.generativeQuestionConfigs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i]);
+                                    var error = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.verify(message.generativeQuestionConfigs[i], long + 1);
                                     if (error)
                                         return "generativeQuestionConfigs." + error;
                                 }
@@ -179332,9 +187018,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.BatchUpdateGenerativeQuestionConfigsResponse} BatchUpdateGenerativeQuestionConfigsResponse
                          */
-                        BatchUpdateGenerativeQuestionConfigsResponse.fromObject = function fromObject(object) {
+                        BatchUpdateGenerativeQuestionConfigsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.BatchUpdateGenerativeQuestionConfigsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.BatchUpdateGenerativeQuestionConfigsResponse();
                             if (object.generativeQuestionConfigs) {
                                 if (!Array.isArray(object.generativeQuestionConfigs))
@@ -179343,7 +187033,7 @@
                                 for (var i = 0; i < object.generativeQuestionConfigs.length; ++i) {
                                     if (typeof object.generativeQuestionConfigs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.BatchUpdateGenerativeQuestionConfigsResponse.generativeQuestionConfigs: object expected");
-                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i]);
+                                    message.generativeQuestionConfigs[i] = $root.google.cloud.retail.v2beta.GenerativeQuestionConfig.fromObject(object.generativeQuestionConfigs[i], long + 1);
                                 }
                             }
                             return message;
@@ -179436,7 +187126,7 @@
                             this.servingConfigLists = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -179642,9 +187332,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Model.decode = function decode(reader, length, error) {
+                        Model.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Model();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -179668,11 +187362,11 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -179688,7 +187382,7 @@
                                         break;
                                     }
                                 case 12: {
-                                        message.lastTuneTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.lastTuneTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 15: {
@@ -179706,15 +187400,15 @@
                                 case 19: {
                                         if (!(message.servingConfigLists && message.servingConfigLists.length))
                                             message.servingConfigLists = [];
-                                        message.servingConfigLists.push($root.google.cloud.retail.v2beta.Model.ServingConfigList.decode(reader, reader.uint32()));
+                                        message.servingConfigLists.push($root.google.cloud.retail.v2beta.Model.ServingConfigList.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 22: {
-                                        message.modelFeaturesConfig = $root.google.cloud.retail.v2beta.Model.ModelFeaturesConfig.decode(reader, reader.uint32());
+                                        message.modelFeaturesConfig = $root.google.cloud.retail.v2beta.Model.ModelFeaturesConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -179745,9 +187439,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Model.verify = function verify(message) {
+                        Model.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -179774,12 +187472,12 @@
                                     break;
                                 }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -179800,7 +187498,7 @@
                                     break;
                                 }
                             if (message.lastTuneTime != null && message.hasOwnProperty("lastTuneTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.lastTuneTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.lastTuneTime, long + 1);
                                 if (error)
                                     return "lastTuneTime." + error;
                             }
@@ -179829,13 +187527,13 @@
                                 if (!Array.isArray(message.servingConfigLists))
                                     return "servingConfigLists: array expected";
                                 for (var i = 0; i < message.servingConfigLists.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Model.ServingConfigList.verify(message.servingConfigLists[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Model.ServingConfigList.verify(message.servingConfigLists[i], long + 1);
                                     if (error)
                                         return "servingConfigLists." + error;
                                 }
                             }
                             if (message.modelFeaturesConfig != null && message.hasOwnProperty("modelFeaturesConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.Model.ModelFeaturesConfig.verify(message.modelFeaturesConfig);
+                                var error = $root.google.cloud.retail.v2beta.Model.ModelFeaturesConfig.verify(message.modelFeaturesConfig, long + 1);
                                 if (error)
                                     return "modelFeaturesConfig." + error;
                             }
@@ -179850,9 +187548,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.Model} Model
                          */
-                        Model.fromObject = function fromObject(object) {
+                        Model.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.Model)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.Model();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -179905,12 +187607,12 @@
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Model.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Model.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.type != null)
                                 message.type = String(object.type);
@@ -179943,7 +187645,7 @@
                             if (object.lastTuneTime != null) {
                                 if (typeof object.lastTuneTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Model.lastTuneTime: object expected");
-                                message.lastTuneTime = $root.google.protobuf.Timestamp.fromObject(object.lastTuneTime);
+                                message.lastTuneTime = $root.google.protobuf.Timestamp.fromObject(object.lastTuneTime, long + 1);
                             }
                             if (object.tuningOperation != null)
                                 message.tuningOperation = String(object.tuningOperation);
@@ -179994,13 +187696,13 @@
                                 for (var i = 0; i < object.servingConfigLists.length; ++i) {
                                     if (typeof object.servingConfigLists[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Model.servingConfigLists: object expected");
-                                    message.servingConfigLists[i] = $root.google.cloud.retail.v2beta.Model.ServingConfigList.fromObject(object.servingConfigLists[i]);
+                                    message.servingConfigLists[i] = $root.google.cloud.retail.v2beta.Model.ServingConfigList.fromObject(object.servingConfigLists[i], long + 1);
                                 }
                             }
                             if (object.modelFeaturesConfig != null) {
                                 if (typeof object.modelFeaturesConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.Model.modelFeaturesConfig: object expected");
-                                message.modelFeaturesConfig = $root.google.cloud.retail.v2beta.Model.ModelFeaturesConfig.fromObject(object.modelFeaturesConfig);
+                                message.modelFeaturesConfig = $root.google.cloud.retail.v2beta.Model.ModelFeaturesConfig.fromObject(object.modelFeaturesConfig, long + 1);
                             }
                             return message;
                         };
@@ -180119,7 +187821,7 @@
                                 this.servingConfigIds = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -180185,9 +187887,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ServingConfigList.decode = function decode(reader, length, error) {
+                            ServingConfigList.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Model.ServingConfigList();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -180201,7 +187907,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -180232,9 +187938,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ServingConfigList.verify = function verify(message) {
+                            ServingConfigList.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.servingConfigIds != null && message.hasOwnProperty("servingConfigIds")) {
                                     if (!Array.isArray(message.servingConfigIds))
                                         return "servingConfigIds: array expected";
@@ -180253,9 +187963,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Model.ServingConfigList} ServingConfigList
                              */
-                            ServingConfigList.fromObject = function fromObject(object) {
+                            ServingConfigList.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Model.ServingConfigList)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Model.ServingConfigList();
                                 if (object.servingConfigIds) {
                                     if (!Array.isArray(object.servingConfigIds))
@@ -180339,7 +188053,7 @@
                             function FrequentlyBoughtTogetherFeaturesConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -180404,9 +188118,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            FrequentlyBoughtTogetherFeaturesConfig.decode = function decode(reader, length, error) {
+                            FrequentlyBoughtTogetherFeaturesConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Model.FrequentlyBoughtTogetherFeaturesConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -180418,7 +188136,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -180449,9 +188167,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            FrequentlyBoughtTogetherFeaturesConfig.verify = function verify(message) {
+                            FrequentlyBoughtTogetherFeaturesConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.contextProductsType != null && message.hasOwnProperty("contextProductsType"))
                                     switch (message.contextProductsType) {
                                     default:
@@ -180472,9 +188194,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Model.FrequentlyBoughtTogetherFeaturesConfig} FrequentlyBoughtTogetherFeaturesConfig
                              */
-                            FrequentlyBoughtTogetherFeaturesConfig.fromObject = function fromObject(object) {
+                            FrequentlyBoughtTogetherFeaturesConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Model.FrequentlyBoughtTogetherFeaturesConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Model.FrequentlyBoughtTogetherFeaturesConfig();
                                 switch (object.contextProductsType) {
                                 default:
@@ -180568,7 +188294,7 @@
                             function ModelFeaturesConfig(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -180647,9 +188373,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            ModelFeaturesConfig.decode = function decode(reader, length, error) {
+                            ModelFeaturesConfig.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.Model.ModelFeaturesConfig();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -180657,11 +188387,11 @@
                                         break;
                                     switch (tag >>> 3) {
                                     case 1: {
-                                            message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2beta.Model.FrequentlyBoughtTogetherFeaturesConfig.decode(reader, reader.uint32());
+                                            message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2beta.Model.FrequentlyBoughtTogetherFeaturesConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -180692,14 +188422,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            ModelFeaturesConfig.verify = function verify(message) {
+                            ModelFeaturesConfig.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 var properties = {};
                                 if (message.frequentlyBoughtTogetherConfig != null && message.hasOwnProperty("frequentlyBoughtTogetherConfig")) {
                                     properties.typeDedicatedConfig = 1;
                                     {
-                                        var error = $root.google.cloud.retail.v2beta.Model.FrequentlyBoughtTogetherFeaturesConfig.verify(message.frequentlyBoughtTogetherConfig);
+                                        var error = $root.google.cloud.retail.v2beta.Model.FrequentlyBoughtTogetherFeaturesConfig.verify(message.frequentlyBoughtTogetherConfig, long + 1);
                                         if (error)
                                             return "frequentlyBoughtTogetherConfig." + error;
                                     }
@@ -180715,14 +188449,18 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.Model.ModelFeaturesConfig} ModelFeaturesConfig
                              */
-                            ModelFeaturesConfig.fromObject = function fromObject(object) {
+                            ModelFeaturesConfig.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.Model.ModelFeaturesConfig)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.Model.ModelFeaturesConfig();
                                 if (object.frequentlyBoughtTogetherConfig != null) {
                                     if (typeof object.frequentlyBoughtTogetherConfig !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.Model.ModelFeaturesConfig.frequentlyBoughtTogetherConfig: object expected");
-                                    message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2beta.Model.FrequentlyBoughtTogetherFeaturesConfig.fromObject(object.frequentlyBoughtTogetherConfig);
+                                    message.frequentlyBoughtTogetherConfig = $root.google.cloud.retail.v2beta.Model.FrequentlyBoughtTogetherFeaturesConfig.fromObject(object.frequentlyBoughtTogetherConfig, long + 1);
                                 }
                                 return message;
                             };
@@ -181185,7 +188923,7 @@
                         function CreateModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -181270,9 +189008,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateModelRequest.decode = function decode(reader, length, error) {
+                        CreateModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CreateModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -181284,7 +189026,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.model = $root.google.cloud.retail.v2beta.Model.decode(reader, reader.uint32());
+                                        message.model = $root.google.cloud.retail.v2beta.Model.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -181292,7 +189034,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -181323,14 +189065,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateModelRequest.verify = function verify(message) {
+                        CreateModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.model != null && message.hasOwnProperty("model")) {
-                                var error = $root.google.cloud.retail.v2beta.Model.verify(message.model);
+                                var error = $root.google.cloud.retail.v2beta.Model.verify(message.model, long + 1);
                                 if (error)
                                     return "model." + error;
                             }
@@ -181348,16 +189094,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CreateModelRequest} CreateModelRequest
                          */
-                        CreateModelRequest.fromObject = function fromObject(object) {
+                        CreateModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CreateModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CreateModelRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.model != null) {
                                 if (typeof object.model !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.CreateModelRequest.model: object expected");
-                                message.model = $root.google.cloud.retail.v2beta.Model.fromObject(object.model);
+                                message.model = $root.google.cloud.retail.v2beta.Model.fromObject(object.model, long + 1);
                             }
                             if (object.dryRun != null)
                                 message.dryRun = Boolean(object.dryRun);
@@ -181441,7 +189191,7 @@
                         function UpdateModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -181516,9 +189266,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateModelRequest.decode = function decode(reader, length, error) {
+                        UpdateModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UpdateModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -181526,15 +189280,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.model = $root.google.cloud.retail.v2beta.Model.decode(reader, reader.uint32());
+                                        message.model = $root.google.cloud.retail.v2beta.Model.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -181565,16 +189319,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateModelRequest.verify = function verify(message) {
+                        UpdateModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.model != null && message.hasOwnProperty("model")) {
-                                var error = $root.google.cloud.retail.v2beta.Model.verify(message.model);
+                                var error = $root.google.cloud.retail.v2beta.Model.verify(message.model, long + 1);
                                 if (error)
                                     return "model." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -181589,19 +189347,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UpdateModelRequest} UpdateModelRequest
                          */
-                        UpdateModelRequest.fromObject = function fromObject(object) {
+                        UpdateModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UpdateModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UpdateModelRequest();
                             if (object.model != null) {
                                 if (typeof object.model !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateModelRequest.model: object expected");
-                                message.model = $root.google.cloud.retail.v2beta.Model.fromObject(object.model);
+                                message.model = $root.google.cloud.retail.v2beta.Model.fromObject(object.model, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateModelRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -181679,7 +189441,7 @@
                         function GetModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -181744,9 +189506,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetModelRequest.decode = function decode(reader, length, error) {
+                        GetModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GetModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -181758,7 +189524,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -181789,9 +189555,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetModelRequest.verify = function verify(message) {
+                        GetModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -181806,9 +189576,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GetModelRequest} GetModelRequest
                          */
-                        GetModelRequest.fromObject = function fromObject(object) {
+                        GetModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GetModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GetModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -181884,7 +189658,7 @@
                         function PauseModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -181949,9 +189723,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PauseModelRequest.decode = function decode(reader, length, error) {
+                        PauseModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PauseModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -181963,7 +189741,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -181994,9 +189772,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PauseModelRequest.verify = function verify(message) {
+                        PauseModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -182011,9 +189793,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PauseModelRequest} PauseModelRequest
                          */
-                        PauseModelRequest.fromObject = function fromObject(object) {
+                        PauseModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PauseModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PauseModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -182089,7 +189875,7 @@
                         function ResumeModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -182154,9 +189940,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ResumeModelRequest.decode = function decode(reader, length, error) {
+                        ResumeModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ResumeModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -182168,7 +189958,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -182199,9 +189989,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ResumeModelRequest.verify = function verify(message) {
+                        ResumeModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -182216,9 +190010,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ResumeModelRequest} ResumeModelRequest
                          */
-                        ResumeModelRequest.fromObject = function fromObject(object) {
+                        ResumeModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ResumeModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ResumeModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -182296,7 +190094,7 @@
                         function ListModelsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -182381,9 +190179,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListModelsRequest.decode = function decode(reader, length, error) {
+                        ListModelsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListModelsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -182403,7 +190205,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -182434,9 +190236,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListModelsRequest.verify = function verify(message) {
+                        ListModelsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -182457,9 +190263,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListModelsRequest} ListModelsRequest
                          */
-                        ListModelsRequest.fromObject = function fromObject(object) {
+                        ListModelsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListModelsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListModelsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -182546,7 +190356,7 @@
                         function DeleteModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -182611,9 +190421,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteModelRequest.decode = function decode(reader, length, error) {
+                        DeleteModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.DeleteModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -182625,7 +190439,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -182656,9 +190470,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteModelRequest.verify = function verify(message) {
+                        DeleteModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -182673,9 +190491,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.DeleteModelRequest} DeleteModelRequest
                          */
-                        DeleteModelRequest.fromObject = function fromObject(object) {
+                        DeleteModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.DeleteModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.DeleteModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -182753,7 +190575,7 @@
                             this.models = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -182829,9 +190651,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListModelsResponse.decode = function decode(reader, length, error) {
+                        ListModelsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListModelsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -182841,7 +190667,7 @@
                                 case 1: {
                                         if (!(message.models && message.models.length))
                                             message.models = [];
-                                        message.models.push($root.google.cloud.retail.v2beta.Model.decode(reader, reader.uint32()));
+                                        message.models.push($root.google.cloud.retail.v2beta.Model.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -182849,7 +190675,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -182880,14 +190706,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListModelsResponse.verify = function verify(message) {
+                        ListModelsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.models != null && message.hasOwnProperty("models")) {
                                 if (!Array.isArray(message.models))
                                     return "models: array expected";
                                 for (var i = 0; i < message.models.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Model.verify(message.models[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Model.verify(message.models[i], long + 1);
                                     if (error)
                                         return "models." + error;
                                 }
@@ -182906,9 +190736,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListModelsResponse} ListModelsResponse
                          */
-                        ListModelsResponse.fromObject = function fromObject(object) {
+                        ListModelsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListModelsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListModelsResponse();
                             if (object.models) {
                                 if (!Array.isArray(object.models))
@@ -182917,7 +190751,7 @@
                                 for (var i = 0; i < object.models.length; ++i) {
                                     if (typeof object.models[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ListModelsResponse.models: object expected");
-                                    message.models[i] = $root.google.cloud.retail.v2beta.Model.fromObject(object.models[i]);
+                                    message.models[i] = $root.google.cloud.retail.v2beta.Model.fromObject(object.models[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -183001,7 +190835,7 @@
                         function TuneModelRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -183066,9 +190900,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TuneModelRequest.decode = function decode(reader, length, error) {
+                        TuneModelRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.TuneModelRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -183080,7 +190918,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -183111,9 +190949,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TuneModelRequest.verify = function verify(message) {
+                        TuneModelRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -183128,9 +190970,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.TuneModelRequest} TuneModelRequest
                          */
-                        TuneModelRequest.fromObject = function fromObject(object) {
+                        TuneModelRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.TuneModelRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.TuneModelRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -183206,7 +191052,7 @@
                         function CreateModelMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -183271,9 +191117,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateModelMetadata.decode = function decode(reader, length, error) {
+                        CreateModelMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CreateModelMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -183285,7 +191135,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -183316,9 +191166,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateModelMetadata.verify = function verify(message) {
+                        CreateModelMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.model != null && message.hasOwnProperty("model"))
                                 if (!$util.isString(message.model))
                                     return "model: string expected";
@@ -183333,9 +191187,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CreateModelMetadata} CreateModelMetadata
                          */
-                        CreateModelMetadata.fromObject = function fromObject(object) {
+                        CreateModelMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CreateModelMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CreateModelMetadata();
                             if (object.model != null)
                                 message.model = String(object.model);
@@ -183411,7 +191269,7 @@
                         function TuneModelMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -183476,9 +191334,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TuneModelMetadata.decode = function decode(reader, length, error) {
+                        TuneModelMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.TuneModelMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -183490,7 +191352,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -183521,9 +191383,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TuneModelMetadata.verify = function verify(message) {
+                        TuneModelMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.model != null && message.hasOwnProperty("model"))
                                 if (!$util.isString(message.model))
                                     return "model: string expected";
@@ -183538,9 +191404,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.TuneModelMetadata} TuneModelMetadata
                          */
-                        TuneModelMetadata.fromObject = function fromObject(object) {
+                        TuneModelMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.TuneModelMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.TuneModelMetadata();
                             if (object.model != null)
                                 message.model = String(object.model);
@@ -183615,7 +191485,7 @@
                         function TuneModelResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -183670,9 +191540,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TuneModelResponse.decode = function decode(reader, length, error) {
+                        TuneModelResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.TuneModelResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -183680,7 +191554,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -183711,9 +191585,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TuneModelResponse.verify = function verify(message) {
+                        TuneModelResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -183725,9 +191603,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.TuneModelResponse} TuneModelResponse
                          */
-                        TuneModelResponse.fromObject = function fromObject(object) {
+                        TuneModelResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.TuneModelResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.TuneModelResponse();
                         };
     
@@ -183870,7 +191752,7 @@
                             this.labels = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -184009,9 +191891,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PredictRequest.decode = function decode(reader, length, error) {
+                        PredictRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PredictRequest(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -184023,7 +191909,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.userEvent = $root.google.cloud.retail.v2beta.UserEvent.decode(reader, reader.uint32());
+                                        message.userEvent = $root.google.cloud.retail.v2beta.UserEvent.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -184055,13 +191941,15 @@
                                                 key = reader.string();
                                                 break;
                                             case 2:
-                                                value = $root.google.protobuf.Value.decode(reader, reader.uint32());
+                                                value = $root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1);
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.params, key);
                                         message.params[key] = value;
                                         break;
                                     }
@@ -184081,15 +191969,17 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -184120,14 +192010,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PredictRequest.verify = function verify(message) {
+                        PredictRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.placement != null && message.hasOwnProperty("placement"))
                                 if (!$util.isString(message.placement))
                                     return "placement: string expected";
                             if (message.userEvent != null && message.hasOwnProperty("userEvent")) {
-                                var error = $root.google.cloud.retail.v2beta.UserEvent.verify(message.userEvent);
+                                var error = $root.google.cloud.retail.v2beta.UserEvent.verify(message.userEvent, long + 1);
                                 if (error)
                                     return "userEvent." + error;
                             }
@@ -184148,7 +192042,7 @@
                                     return "params: object expected";
                                 var key = Object.keys(message.params);
                                 for (var i = 0; i < key.length; ++i) {
-                                    var error = $root.google.protobuf.Value.verify(message.params[key[i]]);
+                                    var error = $root.google.protobuf.Value.verify(message.params[key[i]], long + 1);
                                     if (error)
                                         return "params." + error;
                                 }
@@ -184172,16 +192066,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PredictRequest} PredictRequest
                          */
-                        PredictRequest.fromObject = function fromObject(object) {
+                        PredictRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PredictRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PredictRequest();
                             if (object.placement != null)
                                 message.placement = String(object.placement);
                             if (object.userEvent != null) {
                                 if (typeof object.userEvent !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.PredictRequest.userEvent: object expected");
-                                message.userEvent = $root.google.cloud.retail.v2beta.UserEvent.fromObject(object.userEvent);
+                                message.userEvent = $root.google.cloud.retail.v2beta.UserEvent.fromObject(object.userEvent, long + 1);
                             }
                             if (object.pageSize != null)
                                 message.pageSize = object.pageSize | 0;
@@ -184196,17 +192094,22 @@
                                     throw TypeError(".google.cloud.retail.v2beta.PredictRequest.params: object expected");
                                 message.params = {};
                                 for (var keys = Object.keys(object.params), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.params, keys[i]);
                                     if (typeof object.params[keys[i]] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.PredictRequest.params: object expected");
-                                    message.params[keys[i]] = $root.google.protobuf.Value.fromObject(object.params[keys[i]]);
+                                    message.params[keys[i]] = $root.google.protobuf.Value.fromObject(object.params[keys[i]], long + 1);
                                 }
                             }
                             if (object.labels) {
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.PredictRequest.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             return message;
                         };
@@ -184251,13 +192154,19 @@
                             var keys2;
                             if (message.params && (keys2 = Object.keys(message.params)).length) {
                                 object.params = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.params, keys2[j]);
                                     object.params[keys2[j]] = $root.google.protobuf.Value.toObject(message.params[keys2[j]], options);
+                                }
                             }
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             return object;
                         };
@@ -184316,7 +192225,7 @@
                             this.missingIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -184413,9 +192322,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PredictResponse.decode = function decode(reader, length, error) {
+                        PredictResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PredictResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -184425,7 +192338,7 @@
                                 case 1: {
                                         if (!(message.results && message.results.length))
                                             message.results = [];
-                                        message.results.push($root.google.cloud.retail.v2beta.PredictResponse.PredictionResult.decode(reader, reader.uint32()));
+                                        message.results.push($root.google.cloud.retail.v2beta.PredictResponse.PredictionResult.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -184443,7 +192356,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -184474,14 +192387,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PredictResponse.verify = function verify(message) {
+                        PredictResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.results != null && message.hasOwnProperty("results")) {
                                 if (!Array.isArray(message.results))
                                     return "results: array expected";
                                 for (var i = 0; i < message.results.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.PredictResponse.PredictionResult.verify(message.results[i]);
+                                    var error = $root.google.cloud.retail.v2beta.PredictResponse.PredictionResult.verify(message.results[i], long + 1);
                                     if (error)
                                         return "results." + error;
                                 }
@@ -184510,9 +192427,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PredictResponse} PredictResponse
                          */
-                        PredictResponse.fromObject = function fromObject(object) {
+                        PredictResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PredictResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PredictResponse();
                             if (object.results) {
                                 if (!Array.isArray(object.results))
@@ -184521,7 +192442,7 @@
                                 for (var i = 0; i < object.results.length; ++i) {
                                     if (typeof object.results[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.PredictResponse.results: object expected");
-                                    message.results[i] = $root.google.cloud.retail.v2beta.PredictResponse.PredictionResult.fromObject(object.results[i]);
+                                    message.results[i] = $root.google.cloud.retail.v2beta.PredictResponse.PredictionResult.fromObject(object.results[i], long + 1);
                                 }
                             }
                             if (object.attributionToken != null)
@@ -184624,7 +192545,7 @@
                                 this.metadata = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -184702,9 +192623,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            PredictionResult.decode = function decode(reader, length, error) {
+                            PredictionResult.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PredictResponse.PredictionResult(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -184728,18 +192653,20 @@
                                                     key = reader.string();
                                                     break;
                                                 case 2:
-                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32());
+                                                    value = $root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1);
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.metadata, key);
                                             message.metadata[key] = value;
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -184770,9 +192697,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            PredictionResult.verify = function verify(message) {
+                            PredictionResult.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.id != null && message.hasOwnProperty("id"))
                                     if (!$util.isString(message.id))
                                         return "id: string expected";
@@ -184781,7 +192712,7 @@
                                         return "metadata: object expected";
                                     var key = Object.keys(message.metadata);
                                     for (var i = 0; i < key.length; ++i) {
-                                        var error = $root.google.protobuf.Value.verify(message.metadata[key[i]]);
+                                        var error = $root.google.protobuf.Value.verify(message.metadata[key[i]], long + 1);
                                         if (error)
                                             return "metadata." + error;
                                     }
@@ -184797,9 +192728,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.PredictResponse.PredictionResult} PredictionResult
                              */
-                            PredictionResult.fromObject = function fromObject(object) {
+                            PredictionResult.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.PredictResponse.PredictionResult)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.PredictResponse.PredictionResult();
                                 if (object.id != null)
                                     message.id = String(object.id);
@@ -184808,9 +192743,11 @@
                                         throw TypeError(".google.cloud.retail.v2beta.PredictResponse.PredictionResult.metadata: object expected");
                                     message.metadata = {};
                                     for (var keys = Object.keys(object.metadata), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.metadata, keys[i]);
                                         if (typeof object.metadata[keys[i]] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.PredictResponse.PredictionResult.metadata: object expected");
-                                        message.metadata[keys[i]] = $root.google.protobuf.Value.fromObject(object.metadata[keys[i]]);
+                                        message.metadata[keys[i]] = $root.google.protobuf.Value.fromObject(object.metadata[keys[i]], long + 1);
                                     }
                                 }
                                 return message;
@@ -184838,8 +192775,11 @@
                                 var keys2;
                                 if (message.metadata && (keys2 = Object.keys(message.metadata)).length) {
                                     object.metadata = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.metadata, keys2[j]);
                                         object.metadata[keys2[j]] = $root.google.protobuf.Value.toObject(message.metadata[keys2[j]], options);
+                                    }
                                 }
                                 return object;
                             };
@@ -185362,7 +193302,7 @@
                         function CreateProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -185447,9 +193387,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateProductRequest.decode = function decode(reader, length, error) {
+                        CreateProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CreateProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -185461,7 +193405,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.product = $root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32());
+                                        message.product = $root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -185469,7 +193413,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -185500,14 +193444,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateProductRequest.verify = function verify(message) {
+                        CreateProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.product != null && message.hasOwnProperty("product")) {
-                                var error = $root.google.cloud.retail.v2beta.Product.verify(message.product);
+                                var error = $root.google.cloud.retail.v2beta.Product.verify(message.product, long + 1);
                                 if (error)
                                     return "product." + error;
                             }
@@ -185525,16 +193473,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CreateProductRequest} CreateProductRequest
                          */
-                        CreateProductRequest.fromObject = function fromObject(object) {
+                        CreateProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CreateProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CreateProductRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.product != null) {
                                 if (typeof object.product !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.CreateProductRequest.product: object expected");
-                                message.product = $root.google.cloud.retail.v2beta.Product.fromObject(object.product);
+                                message.product = $root.google.cloud.retail.v2beta.Product.fromObject(object.product, long + 1);
                             }
                             if (object.productId != null)
                                 message.productId = String(object.productId);
@@ -185617,7 +193569,7 @@
                         function GetProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -185682,9 +193634,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetProductRequest.decode = function decode(reader, length, error) {
+                        GetProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GetProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -185696,7 +193652,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -185727,9 +193683,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetProductRequest.verify = function verify(message) {
+                        GetProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -185744,9 +193704,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GetProductRequest} GetProductRequest
                          */
-                        GetProductRequest.fromObject = function fromObject(object) {
+                        GetProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GetProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GetProductRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -185824,7 +193788,7 @@
                         function UpdateProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -185909,9 +193873,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateProductRequest.decode = function decode(reader, length, error) {
+                        UpdateProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UpdateProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -185919,11 +193887,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.product = $root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32());
+                                        message.product = $root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -185931,7 +193899,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -185962,16 +193930,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateProductRequest.verify = function verify(message) {
+                        UpdateProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product")) {
-                                var error = $root.google.cloud.retail.v2beta.Product.verify(message.product);
+                                var error = $root.google.cloud.retail.v2beta.Product.verify(message.product, long + 1);
                                 if (error)
                                     return "product." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -185989,19 +193961,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UpdateProductRequest} UpdateProductRequest
                          */
-                        UpdateProductRequest.fromObject = function fromObject(object) {
+                        UpdateProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UpdateProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UpdateProductRequest();
                             if (object.product != null) {
                                 if (typeof object.product !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateProductRequest.product: object expected");
-                                message.product = $root.google.cloud.retail.v2beta.Product.fromObject(object.product);
+                                message.product = $root.google.cloud.retail.v2beta.Product.fromObject(object.product, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateProductRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -186084,7 +194060,7 @@
                         function DeleteProductRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -186149,9 +194125,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteProductRequest.decode = function decode(reader, length, error) {
+                        DeleteProductRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.DeleteProductRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -186163,7 +194143,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -186194,9 +194174,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteProductRequest.verify = function verify(message) {
+                        DeleteProductRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -186211,9 +194195,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.DeleteProductRequest} DeleteProductRequest
                          */
-                        DeleteProductRequest.fromObject = function fromObject(object) {
+                        DeleteProductRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.DeleteProductRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.DeleteProductRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -186293,7 +194281,7 @@
                         function ListProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -186398,9 +194386,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListProductsRequest.decode = function decode(reader, length, error) {
+                        ListProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -186424,11 +194416,11 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.readMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.readMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -186459,9 +194451,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListProductsRequest.verify = function verify(message) {
+                        ListProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -186475,7 +194471,7 @@
                                 if (!$util.isString(message.filter))
                                     return "filter: string expected";
                             if (message.readMask != null && message.hasOwnProperty("readMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.readMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.readMask, long + 1);
                                 if (error)
                                     return "readMask." + error;
                             }
@@ -186490,9 +194486,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListProductsRequest} ListProductsRequest
                          */
-                        ListProductsRequest.fromObject = function fromObject(object) {
+                        ListProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -186505,7 +194505,7 @@
                             if (object.readMask != null) {
                                 if (typeof object.readMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ListProductsRequest.readMask: object expected");
-                                message.readMask = $root.google.protobuf.FieldMask.fromObject(object.readMask);
+                                message.readMask = $root.google.protobuf.FieldMask.fromObject(object.readMask, long + 1);
                             }
                             return message;
                         };
@@ -186594,7 +194594,7 @@
                             this.products = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -186670,9 +194670,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListProductsResponse.decode = function decode(reader, length, error) {
+                        ListProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -186682,7 +194686,7 @@
                                 case 1: {
                                         if (!(message.products && message.products.length))
                                             message.products = [];
-                                        message.products.push($root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32()));
+                                        message.products.push($root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -186690,7 +194694,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -186721,14 +194725,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListProductsResponse.verify = function verify(message) {
+                        ListProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.products != null && message.hasOwnProperty("products")) {
                                 if (!Array.isArray(message.products))
                                     return "products: array expected";
                                 for (var i = 0; i < message.products.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.Product.verify(message.products[i]);
+                                    var error = $root.google.cloud.retail.v2beta.Product.verify(message.products[i], long + 1);
                                     if (error)
                                         return "products." + error;
                                 }
@@ -186747,9 +194755,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListProductsResponse} ListProductsResponse
                          */
-                        ListProductsResponse.fromObject = function fromObject(object) {
+                        ListProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListProductsResponse();
                             if (object.products) {
                                 if (!Array.isArray(object.products))
@@ -186758,7 +194770,7 @@
                                 for (var i = 0; i < object.products.length; ++i) {
                                     if (typeof object.products[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ListProductsResponse.products: object expected");
-                                    message.products[i] = $root.google.cloud.retail.v2beta.Product.fromObject(object.products[i]);
+                                    message.products[i] = $root.google.cloud.retail.v2beta.Product.fromObject(object.products[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -186845,7 +194857,7 @@
                         function SetInventoryRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -186940,9 +194952,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetInventoryRequest.decode = function decode(reader, length, error) {
+                        SetInventoryRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SetInventoryRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -186950,15 +194966,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.inventory = $root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32());
+                                        message.inventory = $root.google.cloud.retail.v2beta.Product.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.setMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.setMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.setTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
@@ -186966,7 +194982,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -186997,21 +195013,25 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetInventoryRequest.verify = function verify(message) {
+                        SetInventoryRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.inventory != null && message.hasOwnProperty("inventory")) {
-                                var error = $root.google.cloud.retail.v2beta.Product.verify(message.inventory);
+                                var error = $root.google.cloud.retail.v2beta.Product.verify(message.inventory, long + 1);
                                 if (error)
                                     return "inventory." + error;
                             }
                             if (message.setMask != null && message.hasOwnProperty("setMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.setMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.setMask, long + 1);
                                 if (error)
                                     return "setMask." + error;
                             }
                             if (message.setTime != null && message.hasOwnProperty("setTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.setTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.setTime, long + 1);
                                 if (error)
                                     return "setTime." + error;
                             }
@@ -187029,24 +195049,28 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.SetInventoryRequest} SetInventoryRequest
                          */
-                        SetInventoryRequest.fromObject = function fromObject(object) {
+                        SetInventoryRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.SetInventoryRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.SetInventoryRequest();
                             if (object.inventory != null) {
                                 if (typeof object.inventory !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SetInventoryRequest.inventory: object expected");
-                                message.inventory = $root.google.cloud.retail.v2beta.Product.fromObject(object.inventory);
+                                message.inventory = $root.google.cloud.retail.v2beta.Product.fromObject(object.inventory, long + 1);
                             }
                             if (object.setMask != null) {
                                 if (typeof object.setMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SetInventoryRequest.setMask: object expected");
-                                message.setMask = $root.google.protobuf.FieldMask.fromObject(object.setMask);
+                                message.setMask = $root.google.protobuf.FieldMask.fromObject(object.setMask, long + 1);
                             }
                             if (object.setTime != null) {
                                 if (typeof object.setTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.SetInventoryRequest.setTime: object expected");
-                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime);
+                                message.setTime = $root.google.protobuf.Timestamp.fromObject(object.setTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -187131,7 +195155,7 @@
                         function SetInventoryMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -187186,9 +195210,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetInventoryMetadata.decode = function decode(reader, length, error) {
+                        SetInventoryMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SetInventoryMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -187196,7 +195224,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -187227,9 +195255,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetInventoryMetadata.verify = function verify(message) {
+                        SetInventoryMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -187241,9 +195273,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.SetInventoryMetadata} SetInventoryMetadata
                          */
-                        SetInventoryMetadata.fromObject = function fromObject(object) {
+                        SetInventoryMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.SetInventoryMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.SetInventoryMetadata();
                         };
     
@@ -187308,7 +195344,7 @@
                         function SetInventoryResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -187363,9 +195399,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SetInventoryResponse.decode = function decode(reader, length, error) {
+                        SetInventoryResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.SetInventoryResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -187373,7 +195413,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -187404,9 +195444,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SetInventoryResponse.verify = function verify(message) {
+                        SetInventoryResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -187418,9 +195462,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.SetInventoryResponse} SetInventoryResponse
                          */
-                        SetInventoryResponse.fromObject = function fromObject(object) {
+                        SetInventoryResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.SetInventoryResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.SetInventoryResponse();
                         };
     
@@ -187491,7 +195539,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -187597,9 +195645,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddFulfillmentPlacesRequest.decode = function decode(reader, length, error) {
+                        AddFulfillmentPlacesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AddFulfillmentPlacesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -187621,7 +195673,7 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -187629,7 +195681,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -187660,9 +195712,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddFulfillmentPlacesRequest.verify = function verify(message) {
+                        AddFulfillmentPlacesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -187677,7 +195733,7 @@
                                         return "placeIds: string[] expected";
                             }
                             if (message.addTime != null && message.hasOwnProperty("addTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.addTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.addTime, long + 1);
                                 if (error)
                                     return "addTime." + error;
                             }
@@ -187695,9 +195751,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.AddFulfillmentPlacesRequest} AddFulfillmentPlacesRequest
                          */
-                        AddFulfillmentPlacesRequest.fromObject = function fromObject(object) {
+                        AddFulfillmentPlacesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.AddFulfillmentPlacesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.AddFulfillmentPlacesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -187713,7 +195773,7 @@
                             if (object.addTime != null) {
                                 if (typeof object.addTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.AddFulfillmentPlacesRequest.addTime: object expected");
-                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime);
+                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -187805,7 +195865,7 @@
                         function AddFulfillmentPlacesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -187860,9 +195920,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddFulfillmentPlacesMetadata.decode = function decode(reader, length, error) {
+                        AddFulfillmentPlacesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AddFulfillmentPlacesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -187870,7 +195934,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -187901,9 +195965,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddFulfillmentPlacesMetadata.verify = function verify(message) {
+                        AddFulfillmentPlacesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -187915,9 +195983,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.AddFulfillmentPlacesMetadata} AddFulfillmentPlacesMetadata
                          */
-                        AddFulfillmentPlacesMetadata.fromObject = function fromObject(object) {
+                        AddFulfillmentPlacesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.AddFulfillmentPlacesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.AddFulfillmentPlacesMetadata();
                         };
     
@@ -187982,7 +196054,7 @@
                         function AddFulfillmentPlacesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -188037,9 +196109,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddFulfillmentPlacesResponse.decode = function decode(reader, length, error) {
+                        AddFulfillmentPlacesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AddFulfillmentPlacesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -188047,7 +196123,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -188078,9 +196154,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddFulfillmentPlacesResponse.verify = function verify(message) {
+                        AddFulfillmentPlacesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -188092,9 +196172,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.AddFulfillmentPlacesResponse} AddFulfillmentPlacesResponse
                          */
-                        AddFulfillmentPlacesResponse.fromObject = function fromObject(object) {
+                        AddFulfillmentPlacesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.AddFulfillmentPlacesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.AddFulfillmentPlacesResponse();
                         };
     
@@ -188165,7 +196249,7 @@
                             this.localInventories = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -188271,9 +196355,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddLocalInventoriesRequest.decode = function decode(reader, length, error) {
+                        AddLocalInventoriesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AddLocalInventoriesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -188287,15 +196375,15 @@
                                 case 2: {
                                         if (!(message.localInventories && message.localInventories.length))
                                             message.localInventories = [];
-                                        message.localInventories.push($root.google.cloud.retail.v2beta.LocalInventory.decode(reader, reader.uint32()));
+                                        message.localInventories.push($root.google.cloud.retail.v2beta.LocalInventory.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 4: {
-                                        message.addMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.addMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
-                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.addTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
@@ -188303,7 +196391,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -188334,9 +196422,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddLocalInventoriesRequest.verify = function verify(message) {
+                        AddLocalInventoriesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -188344,18 +196436,18 @@
                                 if (!Array.isArray(message.localInventories))
                                     return "localInventories: array expected";
                                 for (var i = 0; i < message.localInventories.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.LocalInventory.verify(message.localInventories[i]);
+                                    var error = $root.google.cloud.retail.v2beta.LocalInventory.verify(message.localInventories[i], long + 1);
                                     if (error)
                                         return "localInventories." + error;
                                 }
                             }
                             if (message.addMask != null && message.hasOwnProperty("addMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.addMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.addMask, long + 1);
                                 if (error)
                                     return "addMask." + error;
                             }
                             if (message.addTime != null && message.hasOwnProperty("addTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.addTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.addTime, long + 1);
                                 if (error)
                                     return "addTime." + error;
                             }
@@ -188373,9 +196465,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.AddLocalInventoriesRequest} AddLocalInventoriesRequest
                          */
-                        AddLocalInventoriesRequest.fromObject = function fromObject(object) {
+                        AddLocalInventoriesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.AddLocalInventoriesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.AddLocalInventoriesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -188386,18 +196482,18 @@
                                 for (var i = 0; i < object.localInventories.length; ++i) {
                                     if (typeof object.localInventories[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.AddLocalInventoriesRequest.localInventories: object expected");
-                                    message.localInventories[i] = $root.google.cloud.retail.v2beta.LocalInventory.fromObject(object.localInventories[i]);
+                                    message.localInventories[i] = $root.google.cloud.retail.v2beta.LocalInventory.fromObject(object.localInventories[i], long + 1);
                                 }
                             }
                             if (object.addMask != null) {
                                 if (typeof object.addMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.AddLocalInventoriesRequest.addMask: object expected");
-                                message.addMask = $root.google.protobuf.FieldMask.fromObject(object.addMask);
+                                message.addMask = $root.google.protobuf.FieldMask.fromObject(object.addMask, long + 1);
                             }
                             if (object.addTime != null) {
                                 if (typeof object.addTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.AddLocalInventoriesRequest.addTime: object expected");
-                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime);
+                                message.addTime = $root.google.protobuf.Timestamp.fromObject(object.addTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -188489,7 +196585,7 @@
                         function AddLocalInventoriesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -188544,9 +196640,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddLocalInventoriesMetadata.decode = function decode(reader, length, error) {
+                        AddLocalInventoriesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AddLocalInventoriesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -188554,7 +196654,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -188585,9 +196685,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddLocalInventoriesMetadata.verify = function verify(message) {
+                        AddLocalInventoriesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -188599,9 +196703,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.AddLocalInventoriesMetadata} AddLocalInventoriesMetadata
                          */
-                        AddLocalInventoriesMetadata.fromObject = function fromObject(object) {
+                        AddLocalInventoriesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.AddLocalInventoriesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.AddLocalInventoriesMetadata();
                         };
     
@@ -188666,7 +196774,7 @@
                         function AddLocalInventoriesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -188721,9 +196829,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddLocalInventoriesResponse.decode = function decode(reader, length, error) {
+                        AddLocalInventoriesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AddLocalInventoriesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -188731,7 +196843,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -188762,9 +196874,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddLocalInventoriesResponse.verify = function verify(message) {
+                        AddLocalInventoriesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -188776,9 +196892,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.AddLocalInventoriesResponse} AddLocalInventoriesResponse
                          */
-                        AddLocalInventoriesResponse.fromObject = function fromObject(object) {
+                        AddLocalInventoriesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.AddLocalInventoriesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.AddLocalInventoriesResponse();
                         };
     
@@ -188848,7 +196968,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -188944,9 +197064,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveLocalInventoriesRequest.decode = function decode(reader, length, error) {
+                        RemoveLocalInventoriesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RemoveLocalInventoriesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -188964,7 +197088,7 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -188972,7 +197096,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -189003,9 +197127,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveLocalInventoriesRequest.verify = function verify(message) {
+                        RemoveLocalInventoriesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -189017,7 +197145,7 @@
                                         return "placeIds: string[] expected";
                             }
                             if (message.removeTime != null && message.hasOwnProperty("removeTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime, long + 1);
                                 if (error)
                                     return "removeTime." + error;
                             }
@@ -189035,9 +197163,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RemoveLocalInventoriesRequest} RemoveLocalInventoriesRequest
                          */
-                        RemoveLocalInventoriesRequest.fromObject = function fromObject(object) {
+                        RemoveLocalInventoriesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RemoveLocalInventoriesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.RemoveLocalInventoriesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -189051,7 +197183,7 @@
                             if (object.removeTime != null) {
                                 if (typeof object.removeTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.RemoveLocalInventoriesRequest.removeTime: object expected");
-                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime);
+                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -189140,7 +197272,7 @@
                         function RemoveLocalInventoriesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -189195,9 +197327,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveLocalInventoriesMetadata.decode = function decode(reader, length, error) {
+                        RemoveLocalInventoriesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RemoveLocalInventoriesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -189205,7 +197341,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -189236,9 +197372,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveLocalInventoriesMetadata.verify = function verify(message) {
+                        RemoveLocalInventoriesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -189250,9 +197390,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RemoveLocalInventoriesMetadata} RemoveLocalInventoriesMetadata
                          */
-                        RemoveLocalInventoriesMetadata.fromObject = function fromObject(object) {
+                        RemoveLocalInventoriesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RemoveLocalInventoriesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.RemoveLocalInventoriesMetadata();
                         };
     
@@ -189317,7 +197461,7 @@
                         function RemoveLocalInventoriesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -189372,9 +197516,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveLocalInventoriesResponse.decode = function decode(reader, length, error) {
+                        RemoveLocalInventoriesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RemoveLocalInventoriesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -189382,7 +197530,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -189413,9 +197561,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveLocalInventoriesResponse.verify = function verify(message) {
+                        RemoveLocalInventoriesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -189427,9 +197579,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RemoveLocalInventoriesResponse} RemoveLocalInventoriesResponse
                          */
-                        RemoveLocalInventoriesResponse.fromObject = function fromObject(object) {
+                        RemoveLocalInventoriesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RemoveLocalInventoriesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.RemoveLocalInventoriesResponse();
                         };
     
@@ -189500,7 +197656,7 @@
                             this.placeIds = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -189606,9 +197762,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveFulfillmentPlacesRequest.decode = function decode(reader, length, error) {
+                        RemoveFulfillmentPlacesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RemoveFulfillmentPlacesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -189630,7 +197790,7 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.removeTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -189638,7 +197798,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -189669,9 +197829,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveFulfillmentPlacesRequest.verify = function verify(message) {
+                        RemoveFulfillmentPlacesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.product != null && message.hasOwnProperty("product"))
                                 if (!$util.isString(message.product))
                                     return "product: string expected";
@@ -189686,7 +197850,7 @@
                                         return "placeIds: string[] expected";
                             }
                             if (message.removeTime != null && message.hasOwnProperty("removeTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.removeTime, long + 1);
                                 if (error)
                                     return "removeTime." + error;
                             }
@@ -189704,9 +197868,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RemoveFulfillmentPlacesRequest} RemoveFulfillmentPlacesRequest
                          */
-                        RemoveFulfillmentPlacesRequest.fromObject = function fromObject(object) {
+                        RemoveFulfillmentPlacesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RemoveFulfillmentPlacesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.RemoveFulfillmentPlacesRequest();
                             if (object.product != null)
                                 message.product = String(object.product);
@@ -189722,7 +197890,7 @@
                             if (object.removeTime != null) {
                                 if (typeof object.removeTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.RemoveFulfillmentPlacesRequest.removeTime: object expected");
-                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime);
+                                message.removeTime = $root.google.protobuf.Timestamp.fromObject(object.removeTime, long + 1);
                             }
                             if (object.allowMissing != null)
                                 message.allowMissing = Boolean(object.allowMissing);
@@ -189814,7 +197982,7 @@
                         function RemoveFulfillmentPlacesMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -189869,9 +198037,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveFulfillmentPlacesMetadata.decode = function decode(reader, length, error) {
+                        RemoveFulfillmentPlacesMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RemoveFulfillmentPlacesMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -189879,7 +198051,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -189910,9 +198082,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveFulfillmentPlacesMetadata.verify = function verify(message) {
+                        RemoveFulfillmentPlacesMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -189924,9 +198100,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RemoveFulfillmentPlacesMetadata} RemoveFulfillmentPlacesMetadata
                          */
-                        RemoveFulfillmentPlacesMetadata.fromObject = function fromObject(object) {
+                        RemoveFulfillmentPlacesMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RemoveFulfillmentPlacesMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.RemoveFulfillmentPlacesMetadata();
                         };
     
@@ -189991,7 +198171,7 @@
                         function RemoveFulfillmentPlacesResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -190046,9 +198226,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveFulfillmentPlacesResponse.decode = function decode(reader, length, error) {
+                        RemoveFulfillmentPlacesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RemoveFulfillmentPlacesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -190056,7 +198240,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -190087,9 +198271,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveFulfillmentPlacesResponse.verify = function verify(message) {
+                        RemoveFulfillmentPlacesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -190101,9 +198289,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RemoveFulfillmentPlacesResponse} RemoveFulfillmentPlacesResponse
                          */
-                        RemoveFulfillmentPlacesResponse.fromObject = function fromObject(object) {
+                        RemoveFulfillmentPlacesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RemoveFulfillmentPlacesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.RemoveFulfillmentPlacesResponse();
                         };
     
@@ -190168,7 +198360,7 @@
                         function PurgeMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -190223,9 +198415,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeMetadata.decode = function decode(reader, length, error) {
+                        PurgeMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PurgeMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -190233,7 +198429,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -190264,9 +198460,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeMetadata.verify = function verify(message) {
+                        PurgeMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -190278,9 +198478,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PurgeMetadata} PurgeMetadata
                          */
-                        PurgeMetadata.fromObject = function fromObject(object) {
+                        PurgeMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PurgeMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.PurgeMetadata();
                         };
     
@@ -190349,7 +198553,7 @@
                         function PurgeProductsMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -190444,9 +198648,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeProductsMetadata.decode = function decode(reader, length, error) {
+                        PurgeProductsMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PurgeProductsMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -190454,11 +198662,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -190470,7 +198678,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -190501,16 +198709,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeProductsMetadata.verify = function verify(message) {
+                        PurgeProductsMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
@@ -190531,19 +198743,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PurgeProductsMetadata} PurgeProductsMetadata
                          */
-                        PurgeProductsMetadata.fromObject = function fromObject(object) {
+                        PurgeProductsMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PurgeProductsMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PurgeProductsMetadata();
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.PurgeProductsMetadata.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.PurgeProductsMetadata.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.successCount != null)
                                 if ($util.Long)
@@ -190661,7 +198877,7 @@
                         function PurgeProductsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -190746,9 +198962,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeProductsRequest.decode = function decode(reader, length, error) {
+                        PurgeProductsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PurgeProductsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -190768,7 +198988,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -190799,9 +199019,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeProductsRequest.verify = function verify(message) {
+                        PurgeProductsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -190822,9 +199046,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PurgeProductsRequest} PurgeProductsRequest
                          */
-                        PurgeProductsRequest.fromObject = function fromObject(object) {
+                        PurgeProductsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PurgeProductsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PurgeProductsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -190913,7 +199141,7 @@
                             this.purgeSample = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -190989,9 +199217,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeProductsResponse.decode = function decode(reader, length, error) {
+                        PurgeProductsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PurgeProductsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -191009,7 +199241,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -191040,9 +199272,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeProductsResponse.verify = function verify(message) {
+                        PurgeProductsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.purgeCount != null && message.hasOwnProperty("purgeCount"))
                                 if (!$util.isInteger(message.purgeCount) && !(message.purgeCount && $util.isInteger(message.purgeCount.low) && $util.isInteger(message.purgeCount.high)))
                                     return "purgeCount: integer|Long expected";
@@ -191064,9 +199300,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PurgeProductsResponse} PurgeProductsResponse
                          */
-                        PurgeProductsResponse.fromObject = function fromObject(object) {
+                        PurgeProductsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PurgeProductsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PurgeProductsResponse();
                             if (object.purgeCount != null)
                                 if ($util.Long)
@@ -191172,7 +199412,7 @@
                         function PurgeUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -191257,9 +199497,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeUserEventsRequest.decode = function decode(reader, length, error) {
+                        PurgeUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PurgeUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -191279,7 +199523,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -191310,9 +199554,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeUserEventsRequest.verify = function verify(message) {
+                        PurgeUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -191333,9 +199581,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PurgeUserEventsRequest} PurgeUserEventsRequest
                          */
-                        PurgeUserEventsRequest.fromObject = function fromObject(object) {
+                        PurgeUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PurgeUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PurgeUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -191422,7 +199674,7 @@
                         function PurgeUserEventsResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -191487,9 +199739,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        PurgeUserEventsResponse.decode = function decode(reader, length, error) {
+                        PurgeUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.PurgeUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -191501,7 +199757,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -191532,9 +199788,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        PurgeUserEventsResponse.verify = function verify(message) {
+                        PurgeUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.purgedEventsCount != null && message.hasOwnProperty("purgedEventsCount"))
                                 if (!$util.isInteger(message.purgedEventsCount) && !(message.purgedEventsCount && $util.isInteger(message.purgedEventsCount.low) && $util.isInteger(message.purgedEventsCount.high)))
                                     return "purgedEventsCount: integer|Long expected";
@@ -191549,9 +199809,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.PurgeUserEventsResponse} PurgeUserEventsResponse
                          */
-                        PurgeUserEventsResponse.fromObject = function fromObject(object) {
+                        PurgeUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.PurgeUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.PurgeUserEventsResponse();
                             if (object.purgedEventsCount != null)
                                 if ($util.Long)
@@ -191643,7 +199907,7 @@
                             this.alertPolicies = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -191719,9 +199983,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AlertConfig.decode = function decode(reader, length, error) {
+                        AlertConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AlertConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -191735,11 +200003,11 @@
                                 case 2: {
                                         if (!(message.alertPolicies && message.alertPolicies.length))
                                             message.alertPolicies = [];
-                                        message.alertPolicies.push($root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.decode(reader, reader.uint32()));
+                                        message.alertPolicies.push($root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -191770,9 +200038,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AlertConfig.verify = function verify(message) {
+                        AlertConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -191780,7 +200052,7 @@
                                 if (!Array.isArray(message.alertPolicies))
                                     return "alertPolicies: array expected";
                                 for (var i = 0; i < message.alertPolicies.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.verify(message.alertPolicies[i]);
+                                    var error = $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.verify(message.alertPolicies[i], long + 1);
                                     if (error)
                                         return "alertPolicies." + error;
                                 }
@@ -191796,9 +200068,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.AlertConfig} AlertConfig
                          */
-                        AlertConfig.fromObject = function fromObject(object) {
+                        AlertConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.AlertConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.AlertConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -191809,7 +200085,7 @@
                                 for (var i = 0; i < object.alertPolicies.length; ++i) {
                                     if (typeof object.alertPolicies[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.AlertConfig.alertPolicies: object expected");
-                                    message.alertPolicies[i] = $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.fromObject(object.alertPolicies[i]);
+                                    message.alertPolicies[i] = $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.fromObject(object.alertPolicies[i], long + 1);
                                 }
                             }
                             return message;
@@ -191891,7 +200167,7 @@
                                 this.recipients = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -191977,9 +200253,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            AlertPolicy.decode = function decode(reader, length, error) {
+                            AlertPolicy.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -191997,11 +200277,11 @@
                                     case 3: {
                                             if (!(message.recipients && message.recipients.length))
                                                 message.recipients = [];
-                                            message.recipients.push($root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.Recipient.decode(reader, reader.uint32()));
+                                            message.recipients.push($root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.Recipient.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -192032,9 +200312,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            AlertPolicy.verify = function verify(message) {
+                            AlertPolicy.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.alertGroup != null && message.hasOwnProperty("alertGroup"))
                                     if (!$util.isString(message.alertGroup))
                                         return "alertGroup: string expected";
@@ -192051,7 +200335,7 @@
                                     if (!Array.isArray(message.recipients))
                                         return "recipients: array expected";
                                     for (var i = 0; i < message.recipients.length; ++i) {
-                                        var error = $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.Recipient.verify(message.recipients[i]);
+                                        var error = $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.Recipient.verify(message.recipients[i], long + 1);
                                         if (error)
                                             return "recipients." + error;
                                     }
@@ -192067,9 +200351,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.retail.v2beta.AlertConfig.AlertPolicy} AlertPolicy
                              */
-                            AlertPolicy.fromObject = function fromObject(object) {
+                            AlertPolicy.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy();
                                 if (object.alertGroup != null)
                                     message.alertGroup = String(object.alertGroup);
@@ -192100,7 +200388,7 @@
                                     for (var i = 0; i < object.recipients.length; ++i) {
                                         if (typeof object.recipients[i] !== "object")
                                             throw TypeError(".google.cloud.retail.v2beta.AlertConfig.AlertPolicy.recipients: object expected");
-                                        message.recipients[i] = $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.Recipient.fromObject(object.recipients[i]);
+                                        message.recipients[i] = $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.Recipient.fromObject(object.recipients[i], long + 1);
                                     }
                                 }
                                 return message;
@@ -192183,7 +200471,7 @@
                                 function Recipient(properties) {
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -192248,9 +200536,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                Recipient.decode = function decode(reader, length, error) {
+                                Recipient.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.Recipient();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -192262,7 +200554,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -192293,9 +200585,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                Recipient.verify = function verify(message) {
+                                Recipient.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.emailAddress != null && message.hasOwnProperty("emailAddress"))
                                         if (!$util.isString(message.emailAddress))
                                             return "emailAddress: string expected";
@@ -192310,9 +200606,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.retail.v2beta.AlertConfig.AlertPolicy.Recipient} Recipient
                                  */
-                                Recipient.fromObject = function fromObject(object) {
+                                Recipient.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.Recipient)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.retail.v2beta.AlertConfig.AlertPolicy.Recipient();
                                     if (object.emailAddress != null)
                                         message.emailAddress = String(object.emailAddress);
@@ -192511,7 +200811,7 @@
                         function GetAlertConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -192576,9 +200876,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetAlertConfigRequest.decode = function decode(reader, length, error) {
+                        GetAlertConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GetAlertConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -192590,7 +200894,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -192621,9 +200925,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetAlertConfigRequest.verify = function verify(message) {
+                        GetAlertConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -192638,9 +200946,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GetAlertConfigRequest} GetAlertConfigRequest
                          */
-                        GetAlertConfigRequest.fromObject = function fromObject(object) {
+                        GetAlertConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GetAlertConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GetAlertConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -192717,7 +201029,7 @@
                         function UpdateAlertConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -192792,9 +201104,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateAlertConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateAlertConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UpdateAlertConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -192802,15 +201118,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.alertConfig = $root.google.cloud.retail.v2beta.AlertConfig.decode(reader, reader.uint32());
+                                        message.alertConfig = $root.google.cloud.retail.v2beta.AlertConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -192841,16 +201157,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateAlertConfigRequest.verify = function verify(message) {
+                        UpdateAlertConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.alertConfig != null && message.hasOwnProperty("alertConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.AlertConfig.verify(message.alertConfig);
+                                var error = $root.google.cloud.retail.v2beta.AlertConfig.verify(message.alertConfig, long + 1);
                                 if (error)
                                     return "alertConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -192865,19 +201185,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UpdateAlertConfigRequest} UpdateAlertConfigRequest
                          */
-                        UpdateAlertConfigRequest.fromObject = function fromObject(object) {
+                        UpdateAlertConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UpdateAlertConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UpdateAlertConfigRequest();
                             if (object.alertConfig != null) {
                                 if (typeof object.alertConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateAlertConfigRequest.alertConfig: object expected");
-                                message.alertConfig = $root.google.cloud.retail.v2beta.AlertConfig.fromObject(object.alertConfig);
+                                message.alertConfig = $root.google.cloud.retail.v2beta.AlertConfig.fromObject(object.alertConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateAlertConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -192984,7 +201308,7 @@
                             this.solutionTypes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -193252,9 +201576,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ServingConfig.decode = function decode(reader, length, error) {
+                        ServingConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ServingConfig();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -193284,7 +201612,7 @@
                                         break;
                                     }
                                 case 6: {
-                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32());
+                                        message.dynamicFacetSpec = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
@@ -193352,7 +201680,7 @@
                                         break;
                                     }
                                 case 21: {
-                                        message.personalizationSpec = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32());
+                                        message.personalizationSpec = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
@@ -193367,7 +201695,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -193398,9 +201726,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ServingConfig.verify = function verify(message) {
+                        ServingConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -193421,7 +201753,7 @@
                                         return "facetControlIds: string[] expected";
                             }
                             if (message.dynamicFacetSpec != null && message.hasOwnProperty("dynamicFacetSpec")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec);
+                                var error = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.verify(message.dynamicFacetSpec, long + 1);
                                 if (error)
                                     return "dynamicFacetSpec." + error;
                             }
@@ -193500,7 +201832,7 @@
                                 if (typeof message.ignoreRecsDenylist !== "boolean")
                                     return "ignoreRecsDenylist: boolean expected";
                             if (message.personalizationSpec != null && message.hasOwnProperty("personalizationSpec")) {
-                                var error = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec);
+                                var error = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.verify(message.personalizationSpec, long + 1);
                                 if (error)
                                     return "personalizationSpec." + error;
                             }
@@ -193528,9 +201860,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ServingConfig} ServingConfig
                          */
-                        ServingConfig.fromObject = function fromObject(object) {
+                        ServingConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ServingConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ServingConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -193550,7 +201886,7 @@
                             if (object.dynamicFacetSpec != null) {
                                 if (typeof object.dynamicFacetSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ServingConfig.dynamicFacetSpec: object expected");
-                                message.dynamicFacetSpec = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec);
+                                message.dynamicFacetSpec = $root.google.cloud.retail.v2beta.SearchRequest.DynamicFacetSpec.fromObject(object.dynamicFacetSpec, long + 1);
                             }
                             if (object.boostControlIds) {
                                 if (!Array.isArray(object.boostControlIds))
@@ -193637,7 +201973,7 @@
                             if (object.personalizationSpec != null) {
                                 if (typeof object.personalizationSpec !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.ServingConfig.personalizationSpec: object expected");
-                                message.personalizationSpec = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec);
+                                message.personalizationSpec = $root.google.cloud.retail.v2beta.SearchRequest.PersonalizationSpec.fromObject(object.personalizationSpec, long + 1);
                             }
                             if (object.solutionTypes) {
                                 if (!Array.isArray(object.solutionTypes))
@@ -194110,7 +202446,7 @@
                         function CreateServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -194195,9 +202531,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateServingConfigRequest.decode = function decode(reader, length, error) {
+                        CreateServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CreateServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -194209,7 +202549,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.servingConfig = $root.google.cloud.retail.v2beta.ServingConfig.decode(reader, reader.uint32());
+                                        message.servingConfig = $root.google.cloud.retail.v2beta.ServingConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -194217,7 +202557,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -194248,14 +202588,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateServingConfigRequest.verify = function verify(message) {
+                        CreateServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ServingConfig.verify(message.servingConfig);
+                                var error = $root.google.cloud.retail.v2beta.ServingConfig.verify(message.servingConfig, long + 1);
                                 if (error)
                                     return "servingConfig." + error;
                             }
@@ -194273,16 +202617,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CreateServingConfigRequest} CreateServingConfigRequest
                          */
-                        CreateServingConfigRequest.fromObject = function fromObject(object) {
+                        CreateServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CreateServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CreateServingConfigRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.servingConfig != null) {
                                 if (typeof object.servingConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.CreateServingConfigRequest.servingConfig: object expected");
-                                message.servingConfig = $root.google.cloud.retail.v2beta.ServingConfig.fromObject(object.servingConfig);
+                                message.servingConfig = $root.google.cloud.retail.v2beta.ServingConfig.fromObject(object.servingConfig, long + 1);
                             }
                             if (object.servingConfigId != null)
                                 message.servingConfigId = String(object.servingConfigId);
@@ -194366,7 +202714,7 @@
                         function UpdateServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -194441,9 +202789,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateServingConfigRequest.decode = function decode(reader, length, error) {
+                        UpdateServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.UpdateServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -194451,15 +202803,15 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.servingConfig = $root.google.cloud.retail.v2beta.ServingConfig.decode(reader, reader.uint32());
+                                        message.servingConfig = $root.google.cloud.retail.v2beta.ServingConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -194490,16 +202842,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateServingConfigRequest.verify = function verify(message) {
+                        UpdateServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig")) {
-                                var error = $root.google.cloud.retail.v2beta.ServingConfig.verify(message.servingConfig);
+                                var error = $root.google.cloud.retail.v2beta.ServingConfig.verify(message.servingConfig, long + 1);
                                 if (error)
                                     return "servingConfig." + error;
                             }
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
@@ -194514,19 +202870,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.UpdateServingConfigRequest} UpdateServingConfigRequest
                          */
-                        UpdateServingConfigRequest.fromObject = function fromObject(object) {
+                        UpdateServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.UpdateServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.UpdateServingConfigRequest();
                             if (object.servingConfig != null) {
                                 if (typeof object.servingConfig !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateServingConfigRequest.servingConfig: object expected");
-                                message.servingConfig = $root.google.cloud.retail.v2beta.ServingConfig.fromObject(object.servingConfig);
+                                message.servingConfig = $root.google.cloud.retail.v2beta.ServingConfig.fromObject(object.servingConfig, long + 1);
                             }
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.UpdateServingConfigRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             return message;
                         };
@@ -194604,7 +202964,7 @@
                         function DeleteServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -194669,9 +203029,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteServingConfigRequest.decode = function decode(reader, length, error) {
+                        DeleteServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.DeleteServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -194683,7 +203047,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -194714,9 +203078,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteServingConfigRequest.verify = function verify(message) {
+                        DeleteServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -194731,9 +203099,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.DeleteServingConfigRequest} DeleteServingConfigRequest
                          */
-                        DeleteServingConfigRequest.fromObject = function fromObject(object) {
+                        DeleteServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.DeleteServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.DeleteServingConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -194809,7 +203181,7 @@
                         function GetServingConfigRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -194874,9 +203246,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetServingConfigRequest.decode = function decode(reader, length, error) {
+                        GetServingConfigRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.GetServingConfigRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -194888,7 +203264,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -194919,9 +203295,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetServingConfigRequest.verify = function verify(message) {
+                        GetServingConfigRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -194936,9 +203316,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.GetServingConfigRequest} GetServingConfigRequest
                          */
-                        GetServingConfigRequest.fromObject = function fromObject(object) {
+                        GetServingConfigRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.GetServingConfigRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.GetServingConfigRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -195016,7 +203400,7 @@
                         function ListServingConfigsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -195101,9 +203485,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListServingConfigsRequest.decode = function decode(reader, length, error) {
+                        ListServingConfigsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListServingConfigsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -195123,7 +203511,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -195154,9 +203542,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListServingConfigsRequest.verify = function verify(message) {
+                        ListServingConfigsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -195177,9 +203569,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListServingConfigsRequest} ListServingConfigsRequest
                          */
-                        ListServingConfigsRequest.fromObject = function fromObject(object) {
+                        ListServingConfigsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListServingConfigsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListServingConfigsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -195268,7 +203664,7 @@
                             this.servingConfigs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -195344,9 +203740,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListServingConfigsResponse.decode = function decode(reader, length, error) {
+                        ListServingConfigsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.ListServingConfigsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -195356,7 +203756,7 @@
                                 case 1: {
                                         if (!(message.servingConfigs && message.servingConfigs.length))
                                             message.servingConfigs = [];
-                                        message.servingConfigs.push($root.google.cloud.retail.v2beta.ServingConfig.decode(reader, reader.uint32()));
+                                        message.servingConfigs.push($root.google.cloud.retail.v2beta.ServingConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -195364,7 +203764,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -195395,14 +203795,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListServingConfigsResponse.verify = function verify(message) {
+                        ListServingConfigsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfigs != null && message.hasOwnProperty("servingConfigs")) {
                                 if (!Array.isArray(message.servingConfigs))
                                     return "servingConfigs: array expected";
                                 for (var i = 0; i < message.servingConfigs.length; ++i) {
-                                    var error = $root.google.cloud.retail.v2beta.ServingConfig.verify(message.servingConfigs[i]);
+                                    var error = $root.google.cloud.retail.v2beta.ServingConfig.verify(message.servingConfigs[i], long + 1);
                                     if (error)
                                         return "servingConfigs." + error;
                                 }
@@ -195421,9 +203825,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.ListServingConfigsResponse} ListServingConfigsResponse
                          */
-                        ListServingConfigsResponse.fromObject = function fromObject(object) {
+                        ListServingConfigsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.ListServingConfigsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.ListServingConfigsResponse();
                             if (object.servingConfigs) {
                                 if (!Array.isArray(object.servingConfigs))
@@ -195432,7 +203840,7 @@
                                 for (var i = 0; i < object.servingConfigs.length; ++i) {
                                     if (typeof object.servingConfigs[i] !== "object")
                                         throw TypeError(".google.cloud.retail.v2beta.ListServingConfigsResponse.servingConfigs: object expected");
-                                    message.servingConfigs[i] = $root.google.cloud.retail.v2beta.ServingConfig.fromObject(object.servingConfigs[i]);
+                                    message.servingConfigs[i] = $root.google.cloud.retail.v2beta.ServingConfig.fromObject(object.servingConfigs[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -195517,7 +203925,7 @@
                         function AddControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -195592,9 +204000,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        AddControlRequest.decode = function decode(reader, length, error) {
+                        AddControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.AddControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -195610,7 +204022,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -195641,9 +204053,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        AddControlRequest.verify = function verify(message) {
+                        AddControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig"))
                                 if (!$util.isString(message.servingConfig))
                                     return "servingConfig: string expected";
@@ -195661,9 +204077,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.AddControlRequest} AddControlRequest
                          */
-                        AddControlRequest.fromObject = function fromObject(object) {
+                        AddControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.AddControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.AddControlRequest();
                             if (object.servingConfig != null)
                                 message.servingConfig = String(object.servingConfig);
@@ -195746,7 +204166,7 @@
                         function RemoveControlRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -195821,9 +204241,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RemoveControlRequest.decode = function decode(reader, length, error) {
+                        RemoveControlRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RemoveControlRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -195839,7 +204263,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -195870,9 +204294,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RemoveControlRequest.verify = function verify(message) {
+                        RemoveControlRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.servingConfig != null && message.hasOwnProperty("servingConfig"))
                                 if (!$util.isString(message.servingConfig))
                                     return "servingConfig: string expected";
@@ -195890,9 +204318,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RemoveControlRequest} RemoveControlRequest
                          */
-                        RemoveControlRequest.fromObject = function fromObject(object) {
+                        RemoveControlRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RemoveControlRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.RemoveControlRequest();
                             if (object.servingConfig != null)
                                 message.servingConfig = String(object.servingConfig);
@@ -196209,7 +204641,7 @@
                         function WriteUserEventRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -196294,9 +204726,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        WriteUserEventRequest.decode = function decode(reader, length, error) {
+                        WriteUserEventRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.WriteUserEventRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -196308,7 +204744,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.userEvent = $root.google.cloud.retail.v2beta.UserEvent.decode(reader, reader.uint32());
+                                        message.userEvent = $root.google.cloud.retail.v2beta.UserEvent.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -196316,7 +204752,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -196347,14 +204783,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        WriteUserEventRequest.verify = function verify(message) {
+                        WriteUserEventRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.userEvent != null && message.hasOwnProperty("userEvent")) {
-                                var error = $root.google.cloud.retail.v2beta.UserEvent.verify(message.userEvent);
+                                var error = $root.google.cloud.retail.v2beta.UserEvent.verify(message.userEvent, long + 1);
                                 if (error)
                                     return "userEvent." + error;
                             }
@@ -196372,16 +204812,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.WriteUserEventRequest} WriteUserEventRequest
                          */
-                        WriteUserEventRequest.fromObject = function fromObject(object) {
+                        WriteUserEventRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.WriteUserEventRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.WriteUserEventRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.userEvent != null) {
                                 if (typeof object.userEvent !== "object")
                                     throw TypeError(".google.cloud.retail.v2beta.WriteUserEventRequest.userEvent: object expected");
-                                message.userEvent = $root.google.cloud.retail.v2beta.UserEvent.fromObject(object.userEvent);
+                                message.userEvent = $root.google.cloud.retail.v2beta.UserEvent.fromObject(object.userEvent, long + 1);
                             }
                             if (object.writeAsync != null)
                                 message.writeAsync = Boolean(object.writeAsync);
@@ -196469,7 +204913,7 @@
                         function CollectUserEventRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -196598,9 +205042,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CollectUserEventRequest.decode = function decode(reader, length, error) {
+                        CollectUserEventRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.CollectUserEventRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -196632,7 +205080,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -196663,9 +205111,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CollectUserEventRequest.verify = function verify(message) {
+                        CollectUserEventRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.prebuiltRule != null && message.hasOwnProperty("prebuiltRule")) {
                                 properties.conversionRule = 1;
@@ -196698,9 +205150,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.CollectUserEventRequest} CollectUserEventRequest
                          */
-                        CollectUserEventRequest.fromObject = function fromObject(object) {
+                        CollectUserEventRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.CollectUserEventRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.CollectUserEventRequest();
                             if (object.prebuiltRule != null)
                                 message.prebuiltRule = String(object.prebuiltRule);
@@ -196819,7 +205275,7 @@
                         function RejoinUserEventsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -196894,9 +205350,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RejoinUserEventsRequest.decode = function decode(reader, length, error) {
+                        RejoinUserEventsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RejoinUserEventsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -196912,7 +205372,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -196943,9 +205403,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RejoinUserEventsRequest.verify = function verify(message) {
+                        RejoinUserEventsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -196969,9 +205433,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RejoinUserEventsRequest} RejoinUserEventsRequest
                          */
-                        RejoinUserEventsRequest.fromObject = function fromObject(object) {
+                        RejoinUserEventsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RejoinUserEventsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.RejoinUserEventsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -197087,7 +205555,7 @@
                         function RejoinUserEventsResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -197152,9 +205620,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RejoinUserEventsResponse.decode = function decode(reader, length, error) {
+                        RejoinUserEventsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RejoinUserEventsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -197166,7 +205638,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -197197,9 +205669,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RejoinUserEventsResponse.verify = function verify(message) {
+                        RejoinUserEventsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.rejoinedUserEventsCount != null && message.hasOwnProperty("rejoinedUserEventsCount"))
                                 if (!$util.isInteger(message.rejoinedUserEventsCount) && !(message.rejoinedUserEventsCount && $util.isInteger(message.rejoinedUserEventsCount.low) && $util.isInteger(message.rejoinedUserEventsCount.high)))
                                     return "rejoinedUserEventsCount: integer|Long expected";
@@ -197214,9 +205690,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RejoinUserEventsResponse} RejoinUserEventsResponse
                          */
-                        RejoinUserEventsResponse.fromObject = function fromObject(object) {
+                        RejoinUserEventsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RejoinUserEventsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.retail.v2beta.RejoinUserEventsResponse();
                             if (object.rejoinedUserEventsCount != null)
                                 if ($util.Long)
@@ -197305,7 +205785,7 @@
                         function RejoinUserEventsMetadata(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -197360,9 +205840,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RejoinUserEventsMetadata.decode = function decode(reader, length, error) {
+                        RejoinUserEventsMetadata.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.retail.v2beta.RejoinUserEventsMetadata();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -197370,7 +205854,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -197401,9 +205885,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RejoinUserEventsMetadata.verify = function verify(message) {
+                        RejoinUserEventsMetadata.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             return null;
                         };
     
@@ -197415,9 +205903,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.retail.v2beta.RejoinUserEventsMetadata} RejoinUserEventsMetadata
                          */
-                        RejoinUserEventsMetadata.fromObject = function fromObject(object) {
+                        RejoinUserEventsMetadata.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.retail.v2beta.RejoinUserEventsMetadata)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             return new $root.google.cloud.retail.v2beta.RejoinUserEventsMetadata();
                         };
     
@@ -197503,7 +205995,7 @@
                     this.rules = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -197579,9 +206071,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Http.decode = function decode(reader, length, error) {
+                Http.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Http();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -197591,7 +206087,7 @@
                         case 1: {
                                 if (!(message.rules && message.rules.length))
                                     message.rules = [];
-                                message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32()));
+                                message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
@@ -197599,7 +206095,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -197630,14 +206126,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Http.verify = function verify(message) {
+                Http.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.rules != null && message.hasOwnProperty("rules")) {
                         if (!Array.isArray(message.rules))
                             return "rules: array expected";
                         for (var i = 0; i < message.rules.length; ++i) {
-                            var error = $root.google.api.HttpRule.verify(message.rules[i]);
+                            var error = $root.google.api.HttpRule.verify(message.rules[i], long + 1);
                             if (error)
                                 return "rules." + error;
                         }
@@ -197656,9 +206156,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.Http} Http
                  */
-                Http.fromObject = function fromObject(object) {
+                Http.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.Http)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.Http();
                     if (object.rules) {
                         if (!Array.isArray(object.rules))
@@ -197667,7 +206171,7 @@
                         for (var i = 0; i < object.rules.length; ++i) {
                             if (typeof object.rules[i] !== "object")
                                 throw TypeError(".google.api.Http.rules: object expected");
-                            message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i]);
+                            message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i], long + 1);
                         }
                     }
                     if (object.fullyDecodeReservedExpansion != null)
@@ -197761,7 +206265,7 @@
                     this.additionalBindings = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -197931,9 +206435,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                HttpRule.decode = function decode(reader, length, error) {
+                HttpRule.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.HttpRule();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -197965,7 +206473,7 @@
                                 break;
                             }
                         case 8: {
-                                message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32());
+                                message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 7: {
@@ -197979,11 +206487,11 @@
                         case 11: {
                                 if (!(message.additionalBindings && message.additionalBindings.length))
                                     message.additionalBindings = [];
-                                message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32()));
+                                message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -198014,9 +206522,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                HttpRule.verify = function verify(message) {
+                HttpRule.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.selector != null && message.hasOwnProperty("selector"))
                         if (!$util.isString(message.selector))
@@ -198059,7 +206571,7 @@
                             return "pattern: multiple values";
                         properties.pattern = 1;
                         {
-                            var error = $root.google.api.CustomHttpPattern.verify(message.custom);
+                            var error = $root.google.api.CustomHttpPattern.verify(message.custom, long + 1);
                             if (error)
                                 return "custom." + error;
                         }
@@ -198074,7 +206586,7 @@
                         if (!Array.isArray(message.additionalBindings))
                             return "additionalBindings: array expected";
                         for (var i = 0; i < message.additionalBindings.length; ++i) {
-                            var error = $root.google.api.HttpRule.verify(message.additionalBindings[i]);
+                            var error = $root.google.api.HttpRule.verify(message.additionalBindings[i], long + 1);
                             if (error)
                                 return "additionalBindings." + error;
                         }
@@ -198090,9 +206602,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.HttpRule} HttpRule
                  */
-                HttpRule.fromObject = function fromObject(object) {
+                HttpRule.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.HttpRule)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.HttpRule();
                     if (object.selector != null)
                         message.selector = String(object.selector);
@@ -198109,7 +206625,7 @@
                     if (object.custom != null) {
                         if (typeof object.custom !== "object")
                             throw TypeError(".google.api.HttpRule.custom: object expected");
-                        message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom);
+                        message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom, long + 1);
                     }
                     if (object.body != null)
                         message.body = String(object.body);
@@ -198122,7 +206638,7 @@
                         for (var i = 0; i < object.additionalBindings.length; ++i) {
                             if (typeof object.additionalBindings[i] !== "object")
                                 throw TypeError(".google.api.HttpRule.additionalBindings: object expected");
-                            message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i]);
+                            message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i], long + 1);
                         }
                     }
                     return message;
@@ -198242,7 +206758,7 @@
                 function CustomHttpPattern(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -198317,9 +206833,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CustomHttpPattern.decode = function decode(reader, length, error) {
+                CustomHttpPattern.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CustomHttpPattern();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -198335,7 +206855,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -198366,9 +206886,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CustomHttpPattern.verify = function verify(message) {
+                CustomHttpPattern.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.kind != null && message.hasOwnProperty("kind"))
                         if (!$util.isString(message.kind))
                             return "kind: string expected";
@@ -198386,9 +206910,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CustomHttpPattern} CustomHttpPattern
                  */
-                CustomHttpPattern.fromObject = function fromObject(object) {
+                CustomHttpPattern.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CustomHttpPattern)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CustomHttpPattern();
                     if (object.kind != null)
                         message.kind = String(object.kind);
@@ -198473,7 +207001,7 @@
                     this.destinations = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -198562,9 +207090,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CommonLanguageSettings.decode = function decode(reader, length, error) {
+                CommonLanguageSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CommonLanguageSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -198587,11 +207119,11 @@
                                 break;
                             }
                         case 3: {
-                                message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.decode(reader, reader.uint32());
+                                message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -198622,9 +207154,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CommonLanguageSettings.verify = function verify(message) {
+                CommonLanguageSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.referenceDocsUri != null && message.hasOwnProperty("referenceDocsUri"))
                         if (!$util.isString(message.referenceDocsUri))
                             return "referenceDocsUri: string expected";
@@ -198642,7 +207178,7 @@
                             }
                     }
                     if (message.selectiveGapicGeneration != null && message.hasOwnProperty("selectiveGapicGeneration")) {
-                        var error = $root.google.api.SelectiveGapicGeneration.verify(message.selectiveGapicGeneration);
+                        var error = $root.google.api.SelectiveGapicGeneration.verify(message.selectiveGapicGeneration, long + 1);
                         if (error)
                             return "selectiveGapicGeneration." + error;
                     }
@@ -198657,9 +207193,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CommonLanguageSettings} CommonLanguageSettings
                  */
-                CommonLanguageSettings.fromObject = function fromObject(object) {
+                CommonLanguageSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CommonLanguageSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CommonLanguageSettings();
                     if (object.referenceDocsUri != null)
                         message.referenceDocsUri = String(object.referenceDocsUri);
@@ -198691,7 +207231,7 @@
                     if (object.selectiveGapicGeneration != null) {
                         if (typeof object.selectiveGapicGeneration !== "object")
                             throw TypeError(".google.api.CommonLanguageSettings.selectiveGapicGeneration: object expected");
-                        message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.fromObject(object.selectiveGapicGeneration);
+                        message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.fromObject(object.selectiveGapicGeneration, long + 1);
                     }
                     return message;
                 };
@@ -198786,7 +207326,7 @@
                 function ClientLibrarySettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -198951,9 +207491,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ClientLibrarySettings.decode = function decode(reader, length, error) {
+                ClientLibrarySettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ClientLibrarySettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -198973,39 +207517,39 @@
                                 break;
                             }
                         case 21: {
-                                message.javaSettings = $root.google.api.JavaSettings.decode(reader, reader.uint32());
+                                message.javaSettings = $root.google.api.JavaSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 22: {
-                                message.cppSettings = $root.google.api.CppSettings.decode(reader, reader.uint32());
+                                message.cppSettings = $root.google.api.CppSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 23: {
-                                message.phpSettings = $root.google.api.PhpSettings.decode(reader, reader.uint32());
+                                message.phpSettings = $root.google.api.PhpSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 24: {
-                                message.pythonSettings = $root.google.api.PythonSettings.decode(reader, reader.uint32());
+                                message.pythonSettings = $root.google.api.PythonSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 25: {
-                                message.nodeSettings = $root.google.api.NodeSettings.decode(reader, reader.uint32());
+                                message.nodeSettings = $root.google.api.NodeSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 26: {
-                                message.dotnetSettings = $root.google.api.DotnetSettings.decode(reader, reader.uint32());
+                                message.dotnetSettings = $root.google.api.DotnetSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 27: {
-                                message.rubySettings = $root.google.api.RubySettings.decode(reader, reader.uint32());
+                                message.rubySettings = $root.google.api.RubySettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 28: {
-                                message.goSettings = $root.google.api.GoSettings.decode(reader, reader.uint32());
+                                message.goSettings = $root.google.api.GoSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -199036,9 +207580,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ClientLibrarySettings.verify = function verify(message) {
+                ClientLibrarySettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.version != null && message.hasOwnProperty("version"))
                         if (!$util.isString(message.version))
                             return "version: string expected";
@@ -199060,42 +207608,42 @@
                         if (typeof message.restNumericEnums !== "boolean")
                             return "restNumericEnums: boolean expected";
                     if (message.javaSettings != null && message.hasOwnProperty("javaSettings")) {
-                        var error = $root.google.api.JavaSettings.verify(message.javaSettings);
+                        var error = $root.google.api.JavaSettings.verify(message.javaSettings, long + 1);
                         if (error)
                             return "javaSettings." + error;
                     }
                     if (message.cppSettings != null && message.hasOwnProperty("cppSettings")) {
-                        var error = $root.google.api.CppSettings.verify(message.cppSettings);
+                        var error = $root.google.api.CppSettings.verify(message.cppSettings, long + 1);
                         if (error)
                             return "cppSettings." + error;
                     }
                     if (message.phpSettings != null && message.hasOwnProperty("phpSettings")) {
-                        var error = $root.google.api.PhpSettings.verify(message.phpSettings);
+                        var error = $root.google.api.PhpSettings.verify(message.phpSettings, long + 1);
                         if (error)
                             return "phpSettings." + error;
                     }
                     if (message.pythonSettings != null && message.hasOwnProperty("pythonSettings")) {
-                        var error = $root.google.api.PythonSettings.verify(message.pythonSettings);
+                        var error = $root.google.api.PythonSettings.verify(message.pythonSettings, long + 1);
                         if (error)
                             return "pythonSettings." + error;
                     }
                     if (message.nodeSettings != null && message.hasOwnProperty("nodeSettings")) {
-                        var error = $root.google.api.NodeSettings.verify(message.nodeSettings);
+                        var error = $root.google.api.NodeSettings.verify(message.nodeSettings, long + 1);
                         if (error)
                             return "nodeSettings." + error;
                     }
                     if (message.dotnetSettings != null && message.hasOwnProperty("dotnetSettings")) {
-                        var error = $root.google.api.DotnetSettings.verify(message.dotnetSettings);
+                        var error = $root.google.api.DotnetSettings.verify(message.dotnetSettings, long + 1);
                         if (error)
                             return "dotnetSettings." + error;
                     }
                     if (message.rubySettings != null && message.hasOwnProperty("rubySettings")) {
-                        var error = $root.google.api.RubySettings.verify(message.rubySettings);
+                        var error = $root.google.api.RubySettings.verify(message.rubySettings, long + 1);
                         if (error)
                             return "rubySettings." + error;
                     }
                     if (message.goSettings != null && message.hasOwnProperty("goSettings")) {
-                        var error = $root.google.api.GoSettings.verify(message.goSettings);
+                        var error = $root.google.api.GoSettings.verify(message.goSettings, long + 1);
                         if (error)
                             return "goSettings." + error;
                     }
@@ -199110,9 +207658,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ClientLibrarySettings} ClientLibrarySettings
                  */
-                ClientLibrarySettings.fromObject = function fromObject(object) {
+                ClientLibrarySettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ClientLibrarySettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ClientLibrarySettings();
                     if (object.version != null)
                         message.version = String(object.version);
@@ -199161,42 +207713,42 @@
                     if (object.javaSettings != null) {
                         if (typeof object.javaSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.javaSettings: object expected");
-                        message.javaSettings = $root.google.api.JavaSettings.fromObject(object.javaSettings);
+                        message.javaSettings = $root.google.api.JavaSettings.fromObject(object.javaSettings, long + 1);
                     }
                     if (object.cppSettings != null) {
                         if (typeof object.cppSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.cppSettings: object expected");
-                        message.cppSettings = $root.google.api.CppSettings.fromObject(object.cppSettings);
+                        message.cppSettings = $root.google.api.CppSettings.fromObject(object.cppSettings, long + 1);
                     }
                     if (object.phpSettings != null) {
                         if (typeof object.phpSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.phpSettings: object expected");
-                        message.phpSettings = $root.google.api.PhpSettings.fromObject(object.phpSettings);
+                        message.phpSettings = $root.google.api.PhpSettings.fromObject(object.phpSettings, long + 1);
                     }
                     if (object.pythonSettings != null) {
                         if (typeof object.pythonSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.pythonSettings: object expected");
-                        message.pythonSettings = $root.google.api.PythonSettings.fromObject(object.pythonSettings);
+                        message.pythonSettings = $root.google.api.PythonSettings.fromObject(object.pythonSettings, long + 1);
                     }
                     if (object.nodeSettings != null) {
                         if (typeof object.nodeSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.nodeSettings: object expected");
-                        message.nodeSettings = $root.google.api.NodeSettings.fromObject(object.nodeSettings);
+                        message.nodeSettings = $root.google.api.NodeSettings.fromObject(object.nodeSettings, long + 1);
                     }
                     if (object.dotnetSettings != null) {
                         if (typeof object.dotnetSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.dotnetSettings: object expected");
-                        message.dotnetSettings = $root.google.api.DotnetSettings.fromObject(object.dotnetSettings);
+                        message.dotnetSettings = $root.google.api.DotnetSettings.fromObject(object.dotnetSettings, long + 1);
                     }
                     if (object.rubySettings != null) {
                         if (typeof object.rubySettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.rubySettings: object expected");
-                        message.rubySettings = $root.google.api.RubySettings.fromObject(object.rubySettings);
+                        message.rubySettings = $root.google.api.RubySettings.fromObject(object.rubySettings, long + 1);
                     }
                     if (object.goSettings != null) {
                         if (typeof object.goSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.goSettings: object expected");
-                        message.goSettings = $root.google.api.GoSettings.fromObject(object.goSettings);
+                        message.goSettings = $root.google.api.GoSettings.fromObject(object.goSettings, long + 1);
                     }
                     return message;
                 };
@@ -199314,7 +207866,7 @@
                     this.librarySettings = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -199482,9 +208034,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Publishing.decode = function decode(reader, length, error) {
+                Publishing.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Publishing();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -199494,7 +208050,7 @@
                         case 2: {
                                 if (!(message.methodSettings && message.methodSettings.length))
                                     message.methodSettings = [];
-                                message.methodSettings.push($root.google.api.MethodSettings.decode(reader, reader.uint32()));
+                                message.methodSettings.push($root.google.api.MethodSettings.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 101: {
@@ -199530,7 +208086,7 @@
                         case 109: {
                                 if (!(message.librarySettings && message.librarySettings.length))
                                     message.librarySettings = [];
-                                message.librarySettings.push($root.google.api.ClientLibrarySettings.decode(reader, reader.uint32()));
+                                message.librarySettings.push($root.google.api.ClientLibrarySettings.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 110: {
@@ -199542,7 +208098,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -199573,14 +208129,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Publishing.verify = function verify(message) {
+                Publishing.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.methodSettings != null && message.hasOwnProperty("methodSettings")) {
                         if (!Array.isArray(message.methodSettings))
                             return "methodSettings: array expected";
                         for (var i = 0; i < message.methodSettings.length; ++i) {
-                            var error = $root.google.api.MethodSettings.verify(message.methodSettings[i]);
+                            var error = $root.google.api.MethodSettings.verify(message.methodSettings[i], long + 1);
                             if (error)
                                 return "methodSettings." + error;
                         }
@@ -199625,7 +208185,7 @@
                         if (!Array.isArray(message.librarySettings))
                             return "librarySettings: array expected";
                         for (var i = 0; i < message.librarySettings.length; ++i) {
-                            var error = $root.google.api.ClientLibrarySettings.verify(message.librarySettings[i]);
+                            var error = $root.google.api.ClientLibrarySettings.verify(message.librarySettings[i], long + 1);
                             if (error)
                                 return "librarySettings." + error;
                         }
@@ -199647,9 +208207,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.Publishing} Publishing
                  */
-                Publishing.fromObject = function fromObject(object) {
+                Publishing.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.Publishing)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.Publishing();
                     if (object.methodSettings) {
                         if (!Array.isArray(object.methodSettings))
@@ -199658,7 +208222,7 @@
                         for (var i = 0; i < object.methodSettings.length; ++i) {
                             if (typeof object.methodSettings[i] !== "object")
                                 throw TypeError(".google.api.Publishing.methodSettings: object expected");
-                            message.methodSettings[i] = $root.google.api.MethodSettings.fromObject(object.methodSettings[i]);
+                            message.methodSettings[i] = $root.google.api.MethodSettings.fromObject(object.methodSettings[i], long + 1);
                         }
                     }
                     if (object.newIssueUri != null)
@@ -199725,7 +208289,7 @@
                         for (var i = 0; i < object.librarySettings.length; ++i) {
                             if (typeof object.librarySettings[i] !== "object")
                                 throw TypeError(".google.api.Publishing.librarySettings: object expected");
-                            message.librarySettings[i] = $root.google.api.ClientLibrarySettings.fromObject(object.librarySettings[i]);
+                            message.librarySettings[i] = $root.google.api.ClientLibrarySettings.fromObject(object.librarySettings[i], long + 1);
                         }
                     }
                     if (object.protoReferenceDocumentationUri != null)
@@ -199849,7 +208413,7 @@
                     this.serviceClassNames = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -199935,9 +208499,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                JavaSettings.decode = function decode(reader, length, error) {
+                JavaSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.JavaSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -199964,19 +208532,21 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.serviceClassNames, key);
                                 message.serviceClassNames[key] = value;
                                 break;
                             }
                         case 3: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -200007,9 +208577,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                JavaSettings.verify = function verify(message) {
+                JavaSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.libraryPackage != null && message.hasOwnProperty("libraryPackage"))
                         if (!$util.isString(message.libraryPackage))
                             return "libraryPackage: string expected";
@@ -200022,7 +208596,7 @@
                                 return "serviceClassNames: string{k:string} expected";
                     }
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -200037,9 +208611,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.JavaSettings} JavaSettings
                  */
-                JavaSettings.fromObject = function fromObject(object) {
+                JavaSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.JavaSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.JavaSettings();
                     if (object.libraryPackage != null)
                         message.libraryPackage = String(object.libraryPackage);
@@ -200047,13 +208625,16 @@
                         if (typeof object.serviceClassNames !== "object")
                             throw TypeError(".google.api.JavaSettings.serviceClassNames: object expected");
                         message.serviceClassNames = {};
-                        for (var keys = Object.keys(object.serviceClassNames), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.serviceClassNames), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.serviceClassNames, keys[i]);
                             message.serviceClassNames[keys[i]] = String(object.serviceClassNames[keys[i]]);
+                        }
                     }
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.JavaSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -200082,8 +208663,11 @@
                     var keys2;
                     if (message.serviceClassNames && (keys2 = Object.keys(message.serviceClassNames)).length) {
                         object.serviceClassNames = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.serviceClassNames, keys2[j]);
                             object.serviceClassNames[keys2[j]] = message.serviceClassNames[keys2[j]];
+                        }
                     }
                     if (message.common != null && message.hasOwnProperty("common"))
                         object.common = $root.google.api.CommonLanguageSettings.toObject(message.common, options);
@@ -200139,7 +208723,7 @@
                 function CppSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -200204,9 +208788,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CppSettings.decode = function decode(reader, length, error) {
+                CppSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CppSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -200214,11 +208802,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -200249,11 +208837,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CppSettings.verify = function verify(message) {
+                CppSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -200268,14 +208860,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CppSettings} CppSettings
                  */
-                CppSettings.fromObject = function fromObject(object) {
+                CppSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CppSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CppSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.CppSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -200349,7 +208945,7 @@
                 function PhpSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -200414,9 +209010,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                PhpSettings.decode = function decode(reader, length, error) {
+                PhpSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PhpSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -200424,11 +209024,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -200459,11 +209059,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                PhpSettings.verify = function verify(message) {
+                PhpSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -200478,14 +209082,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.PhpSettings} PhpSettings
                  */
-                PhpSettings.fromObject = function fromObject(object) {
+                PhpSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.PhpSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.PhpSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.PhpSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -200560,7 +209168,7 @@
                 function PythonSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -200635,9 +209243,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                PythonSettings.decode = function decode(reader, length, error) {
+                PythonSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PythonSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -200645,15 +209257,15 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
-                                message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.decode(reader, reader.uint32());
+                                message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -200684,16 +209296,20 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                PythonSettings.verify = function verify(message) {
+                PythonSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
                     if (message.experimentalFeatures != null && message.hasOwnProperty("experimentalFeatures")) {
-                        var error = $root.google.api.PythonSettings.ExperimentalFeatures.verify(message.experimentalFeatures);
+                        var error = $root.google.api.PythonSettings.ExperimentalFeatures.verify(message.experimentalFeatures, long + 1);
                         if (error)
                             return "experimentalFeatures." + error;
                     }
@@ -200708,19 +209324,23 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.PythonSettings} PythonSettings
                  */
-                PythonSettings.fromObject = function fromObject(object) {
+                PythonSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.PythonSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.PythonSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.PythonSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.experimentalFeatures != null) {
                         if (typeof object.experimentalFeatures !== "object")
                             throw TypeError(".google.api.PythonSettings.experimentalFeatures: object expected");
-                        message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.fromObject(object.experimentalFeatures);
+                        message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.fromObject(object.experimentalFeatures, long + 1);
                     }
                     return message;
                 };
@@ -200797,7 +209417,7 @@
                     function ExperimentalFeatures(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -200882,9 +209502,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ExperimentalFeatures.decode = function decode(reader, length, error) {
+                    ExperimentalFeatures.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PythonSettings.ExperimentalFeatures();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -200904,7 +209528,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -200935,9 +209559,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ExperimentalFeatures.verify = function verify(message) {
+                    ExperimentalFeatures.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.restAsyncIoEnabled != null && message.hasOwnProperty("restAsyncIoEnabled"))
                             if (typeof message.restAsyncIoEnabled !== "boolean")
                                 return "restAsyncIoEnabled: boolean expected";
@@ -200958,9 +209586,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.api.PythonSettings.ExperimentalFeatures} ExperimentalFeatures
                      */
-                    ExperimentalFeatures.fromObject = function fromObject(object) {
+                    ExperimentalFeatures.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.api.PythonSettings.ExperimentalFeatures)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.api.PythonSettings.ExperimentalFeatures();
                         if (object.restAsyncIoEnabled != null)
                             message.restAsyncIoEnabled = Boolean(object.restAsyncIoEnabled);
@@ -201050,7 +209682,7 @@
                 function NodeSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -201115,9 +209747,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                NodeSettings.decode = function decode(reader, length, error) {
+                NodeSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.NodeSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -201125,11 +209761,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -201160,11 +209796,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                NodeSettings.verify = function verify(message) {
+                NodeSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -201179,14 +209819,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.NodeSettings} NodeSettings
                  */
-                NodeSettings.fromObject = function fromObject(object) {
+                NodeSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.NodeSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.NodeSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.NodeSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -201270,7 +209914,7 @@
                     this.handwrittenSignatures = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -201390,9 +210034,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DotnetSettings.decode = function decode(reader, length, error) {
+                DotnetSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.DotnetSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -201400,7 +210048,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
@@ -201419,10 +210067,12 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedServices, key);
                                 message.renamedServices[key] = value;
                                 break;
                             }
@@ -201442,10 +210092,12 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedResources, key);
                                 message.renamedResources[key] = value;
                                 break;
                             }
@@ -201468,7 +210120,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -201499,11 +210151,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DotnetSettings.verify = function verify(message) {
+                DotnetSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -201555,28 +210211,38 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.DotnetSettings} DotnetSettings
                  */
-                DotnetSettings.fromObject = function fromObject(object) {
+                DotnetSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.DotnetSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.DotnetSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.DotnetSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.renamedServices) {
                         if (typeof object.renamedServices !== "object")
                             throw TypeError(".google.api.DotnetSettings.renamedServices: object expected");
                         message.renamedServices = {};
-                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedServices, keys[i]);
                             message.renamedServices[keys[i]] = String(object.renamedServices[keys[i]]);
+                        }
                     }
                     if (object.renamedResources) {
                         if (typeof object.renamedResources !== "object")
                             throw TypeError(".google.api.DotnetSettings.renamedResources: object expected");
                         message.renamedResources = {};
-                        for (var keys = Object.keys(object.renamedResources), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedResources), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedResources, keys[i]);
                             message.renamedResources[keys[i]] = String(object.renamedResources[keys[i]]);
+                        }
                     }
                     if (object.ignoredResources) {
                         if (!Array.isArray(object.ignoredResources))
@@ -201631,13 +210297,19 @@
                     var keys2;
                     if (message.renamedServices && (keys2 = Object.keys(message.renamedServices)).length) {
                         object.renamedServices = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedServices, keys2[j]);
                             object.renamedServices[keys2[j]] = message.renamedServices[keys2[j]];
+                        }
                     }
                     if (message.renamedResources && (keys2 = Object.keys(message.renamedResources)).length) {
                         object.renamedResources = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedResources, keys2[j]);
                             object.renamedResources[keys2[j]] = message.renamedResources[keys2[j]];
+                        }
                     }
                     if (message.ignoredResources && message.ignoredResources.length) {
                         object.ignoredResources = [];
@@ -201706,7 +210378,7 @@
                 function RubySettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -201771,9 +210443,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                RubySettings.decode = function decode(reader, length, error) {
+                RubySettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.RubySettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -201781,11 +210457,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -201816,11 +210492,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                RubySettings.verify = function verify(message) {
+                RubySettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -201835,14 +210515,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.RubySettings} RubySettings
                  */
-                RubySettings.fromObject = function fromObject(object) {
+                RubySettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.RubySettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.RubySettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.RubySettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -201918,7 +210602,7 @@
                     this.renamedServices = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -201994,9 +210678,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GoSettings.decode = function decode(reader, length, error) {
+                GoSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.GoSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -202004,7 +210692,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
@@ -202023,15 +210711,17 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedServices, key);
                                 message.renamedServices[key] = value;
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -202062,11 +210752,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GoSettings.verify = function verify(message) {
+                GoSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -202089,21 +210783,28 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.GoSettings} GoSettings
                  */
-                GoSettings.fromObject = function fromObject(object) {
+                GoSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.GoSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.GoSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.GoSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.renamedServices) {
                         if (typeof object.renamedServices !== "object")
                             throw TypeError(".google.api.GoSettings.renamedServices: object expected");
                         message.renamedServices = {};
-                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedServices, keys[i]);
                             message.renamedServices[keys[i]] = String(object.renamedServices[keys[i]]);
+                        }
                     }
                     return message;
                 };
@@ -202130,8 +210831,11 @@
                     var keys2;
                     if (message.renamedServices && (keys2 = Object.keys(message.renamedServices)).length) {
                         object.renamedServices = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedServices, keys2[j]);
                             object.renamedServices[keys2[j]] = message.renamedServices[keys2[j]];
+                        }
                     }
                     return object;
                 };
@@ -202188,7 +210892,7 @@
                     this.autoPopulatedFields = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -202274,9 +210978,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodSettings.decode = function decode(reader, length, error) {
+                MethodSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.MethodSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -202288,7 +210996,7 @@
                                 break;
                             }
                         case 2: {
-                                message.longRunning = $root.google.api.MethodSettings.LongRunning.decode(reader, reader.uint32());
+                                message.longRunning = $root.google.api.MethodSettings.LongRunning.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -202298,7 +211006,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -202329,14 +211037,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodSettings.verify = function verify(message) {
+                MethodSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.selector != null && message.hasOwnProperty("selector"))
                         if (!$util.isString(message.selector))
                             return "selector: string expected";
                     if (message.longRunning != null && message.hasOwnProperty("longRunning")) {
-                        var error = $root.google.api.MethodSettings.LongRunning.verify(message.longRunning);
+                        var error = $root.google.api.MethodSettings.LongRunning.verify(message.longRunning, long + 1);
                         if (error)
                             return "longRunning." + error;
                     }
@@ -202358,16 +211070,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.MethodSettings} MethodSettings
                  */
-                MethodSettings.fromObject = function fromObject(object) {
+                MethodSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.MethodSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.MethodSettings();
                     if (object.selector != null)
                         message.selector = String(object.selector);
                     if (object.longRunning != null) {
                         if (typeof object.longRunning !== "object")
                             throw TypeError(".google.api.MethodSettings.longRunning: object expected");
-                        message.longRunning = $root.google.api.MethodSettings.LongRunning.fromObject(object.longRunning);
+                        message.longRunning = $root.google.api.MethodSettings.LongRunning.fromObject(object.longRunning, long + 1);
                     }
                     if (object.autoPopulatedFields) {
                         if (!Array.isArray(object.autoPopulatedFields))
@@ -202459,7 +211175,7 @@
                     function LongRunning(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -202554,9 +211270,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    LongRunning.decode = function decode(reader, length, error) {
+                    LongRunning.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.MethodSettings.LongRunning();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -202564,7 +211284,7 @@
                                 break;
                             switch (tag >>> 3) {
                             case 1: {
-                                    message.initialPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.initialPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 2: {
@@ -202572,15 +211292,15 @@
                                     break;
                                 }
                             case 3: {
-                                    message.maxPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.maxPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 4: {
-                                    message.totalPollTimeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.totalPollTimeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -202611,11 +211331,15 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    LongRunning.verify = function verify(message) {
+                    LongRunning.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.initialPollDelay != null && message.hasOwnProperty("initialPollDelay")) {
-                            var error = $root.google.protobuf.Duration.verify(message.initialPollDelay);
+                            var error = $root.google.protobuf.Duration.verify(message.initialPollDelay, long + 1);
                             if (error)
                                 return "initialPollDelay." + error;
                         }
@@ -202623,12 +211347,12 @@
                             if (typeof message.pollDelayMultiplier !== "number")
                                 return "pollDelayMultiplier: number expected";
                         if (message.maxPollDelay != null && message.hasOwnProperty("maxPollDelay")) {
-                            var error = $root.google.protobuf.Duration.verify(message.maxPollDelay);
+                            var error = $root.google.protobuf.Duration.verify(message.maxPollDelay, long + 1);
                             if (error)
                                 return "maxPollDelay." + error;
                         }
                         if (message.totalPollTimeout != null && message.hasOwnProperty("totalPollTimeout")) {
-                            var error = $root.google.protobuf.Duration.verify(message.totalPollTimeout);
+                            var error = $root.google.protobuf.Duration.verify(message.totalPollTimeout, long + 1);
                             if (error)
                                 return "totalPollTimeout." + error;
                         }
@@ -202643,26 +211367,30 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.api.MethodSettings.LongRunning} LongRunning
                      */
-                    LongRunning.fromObject = function fromObject(object) {
+                    LongRunning.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.api.MethodSettings.LongRunning)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.api.MethodSettings.LongRunning();
                         if (object.initialPollDelay != null) {
                             if (typeof object.initialPollDelay !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.initialPollDelay: object expected");
-                            message.initialPollDelay = $root.google.protobuf.Duration.fromObject(object.initialPollDelay);
+                            message.initialPollDelay = $root.google.protobuf.Duration.fromObject(object.initialPollDelay, long + 1);
                         }
                         if (object.pollDelayMultiplier != null)
                             message.pollDelayMultiplier = Number(object.pollDelayMultiplier);
                         if (object.maxPollDelay != null) {
                             if (typeof object.maxPollDelay !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.maxPollDelay: object expected");
-                            message.maxPollDelay = $root.google.protobuf.Duration.fromObject(object.maxPollDelay);
+                            message.maxPollDelay = $root.google.protobuf.Duration.fromObject(object.maxPollDelay, long + 1);
                         }
                         if (object.totalPollTimeout != null) {
                             if (typeof object.totalPollTimeout !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.totalPollTimeout: object expected");
-                            message.totalPollTimeout = $root.google.protobuf.Duration.fromObject(object.totalPollTimeout);
+                            message.totalPollTimeout = $root.google.protobuf.Duration.fromObject(object.totalPollTimeout, long + 1);
                         }
                         return message;
                     };
@@ -202793,7 +211521,7 @@
                     this.methods = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -202869,9 +211597,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                SelectiveGapicGeneration.decode = function decode(reader, length, error) {
+                SelectiveGapicGeneration.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.SelectiveGapicGeneration();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -202889,7 +211621,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -202920,9 +211652,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                SelectiveGapicGeneration.verify = function verify(message) {
+                SelectiveGapicGeneration.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.methods != null && message.hasOwnProperty("methods")) {
                         if (!Array.isArray(message.methods))
                             return "methods: array expected";
@@ -202944,9 +211680,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.SelectiveGapicGeneration} SelectiveGapicGeneration
                  */
-                SelectiveGapicGeneration.fromObject = function fromObject(object) {
+                SelectiveGapicGeneration.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.SelectiveGapicGeneration)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.SelectiveGapicGeneration();
                     if (object.methods) {
                         if (!Array.isArray(object.methods))
@@ -203098,7 +211838,7 @@
                     this.style = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -203228,9 +211968,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ResourceDescriptor.decode = function decode(reader, length, error) {
+                ResourceDescriptor.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceDescriptor();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -203275,7 +212019,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -203306,9 +212050,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ResourceDescriptor.verify = function verify(message) {
+                ResourceDescriptor.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type != null && message.hasOwnProperty("type"))
                         if (!$util.isString(message.type))
                             return "type: string expected";
@@ -203360,9 +212108,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ResourceDescriptor} ResourceDescriptor
                  */
-                ResourceDescriptor.fromObject = function fromObject(object) {
+                ResourceDescriptor.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ResourceDescriptor)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ResourceDescriptor();
                     if (object.type != null)
                         message.type = String(object.type);
@@ -203550,7 +212302,7 @@
                 function ResourceReference(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -203625,9 +212377,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ResourceReference.decode = function decode(reader, length, error) {
+                ResourceReference.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceReference();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -203643,7 +212399,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -203674,9 +212430,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ResourceReference.verify = function verify(message) {
+                ResourceReference.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type != null && message.hasOwnProperty("type"))
                         if (!$util.isString(message.type))
                             return "type: string expected";
@@ -203694,9 +212454,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ResourceReference} ResourceReference
                  */
-                ResourceReference.fromObject = function fromObject(object) {
+                ResourceReference.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ResourceReference)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ResourceReference();
                     if (object.type != null)
                         message.type = String(object.type);
@@ -203781,7 +212545,7 @@
                     this.extensions = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -203867,9 +212631,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                HttpBody.decode = function decode(reader, length, error) {
+                HttpBody.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.HttpBody();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -203887,11 +212655,11 @@
                         case 3: {
                                 if (!(message.extensions && message.extensions.length))
                                     message.extensions = [];
-                                message.extensions.push($root.google.protobuf.Any.decode(reader, reader.uint32()));
+                                message.extensions.push($root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -203922,9 +212690,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                HttpBody.verify = function verify(message) {
+                HttpBody.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.contentType != null && message.hasOwnProperty("contentType"))
                         if (!$util.isString(message.contentType))
                             return "contentType: string expected";
@@ -203935,7 +212707,7 @@
                         if (!Array.isArray(message.extensions))
                             return "extensions: array expected";
                         for (var i = 0; i < message.extensions.length; ++i) {
-                            var error = $root.google.protobuf.Any.verify(message.extensions[i]);
+                            var error = $root.google.protobuf.Any.verify(message.extensions[i], long + 1);
                             if (error)
                                 return "extensions." + error;
                         }
@@ -203951,9 +212723,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.HttpBody} HttpBody
                  */
-                HttpBody.fromObject = function fromObject(object) {
+                HttpBody.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.HttpBody)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.HttpBody();
                     if (object.contentType != null)
                         message.contentType = String(object.contentType);
@@ -203969,7 +212745,7 @@
                         for (var i = 0; i < object.extensions.length; ++i) {
                             if (typeof object.extensions[i] !== "object")
                                 throw TypeError(".google.api.HttpBody.extensions: object expected");
-                            message.extensions[i] = $root.google.protobuf.Any.fromObject(object.extensions[i]);
+                            message.extensions[i] = $root.google.protobuf.Any.fromObject(object.extensions[i], long + 1);
                         }
                     }
                     return message;
@@ -204074,7 +212850,7 @@
                     this.file = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -204140,9 +212916,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileDescriptorSet.decode = function decode(reader, length, error) {
+                FileDescriptorSet.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorSet();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -204152,11 +212932,11 @@
                         case 1: {
                                 if (!(message.file && message.file.length))
                                     message.file = [];
-                                message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32()));
+                                message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -204187,14 +212967,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileDescriptorSet.verify = function verify(message) {
+                FileDescriptorSet.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.file != null && message.hasOwnProperty("file")) {
                         if (!Array.isArray(message.file))
                             return "file: array expected";
                         for (var i = 0; i < message.file.length; ++i) {
-                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i]);
+                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i], long + 1);
                             if (error)
                                 return "file." + error;
                         }
@@ -204210,9 +212994,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet
                  */
-                FileDescriptorSet.fromObject = function fromObject(object) {
+                FileDescriptorSet.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileDescriptorSet)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileDescriptorSet();
                     if (object.file) {
                         if (!Array.isArray(object.file))
@@ -204221,7 +213009,7 @@
                         for (var i = 0; i < object.file.length; ++i) {
                             if (typeof object.file[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorSet.file: object expected");
-                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i]);
+                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i], long + 1);
                         }
                     }
                     return message;
@@ -204354,7 +213142,7 @@
                     this.extension = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -204557,9 +213345,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileDescriptorProto.decode = function decode(reader, length, error) {
+                FileDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -204611,33 +213403,33 @@
                         case 4: {
                                 if (!(message.messageType && message.messageType.length))
                                     message.messageType = [];
-                                message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
+                                message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
                                 if (!(message.enumType && message.enumType.length))
                                     message.enumType = [];
-                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
+                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 6: {
                                 if (!(message.service && message.service.length))
                                     message.service = [];
-                                message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32()));
+                                message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 7: {
                                 if (!(message.extension && message.extension.length))
                                     message.extension = [];
-                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 8: {
-                                message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 9: {
-                                message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32());
+                                message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 12: {
@@ -204649,7 +213441,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -204680,9 +213472,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileDescriptorProto.verify = function verify(message) {
+                FileDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -204721,7 +213517,7 @@
                         if (!Array.isArray(message.messageType))
                             return "messageType: array expected";
                         for (var i = 0; i < message.messageType.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i]);
+                            var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i], long + 1);
                             if (error)
                                 return "messageType." + error;
                         }
@@ -204730,7 +213526,7 @@
                         if (!Array.isArray(message.enumType))
                             return "enumType: array expected";
                         for (var i = 0; i < message.enumType.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i], long + 1);
                             if (error)
                                 return "enumType." + error;
                         }
@@ -204739,7 +213535,7 @@
                         if (!Array.isArray(message.service))
                             return "service: array expected";
                         for (var i = 0; i < message.service.length; ++i) {
-                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i]);
+                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i], long + 1);
                             if (error)
                                 return "service." + error;
                         }
@@ -204748,18 +213544,18 @@
                         if (!Array.isArray(message.extension))
                             return "extension: array expected";
                         for (var i = 0; i < message.extension.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i], long + 1);
                             if (error)
                                 return "extension." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.FileOptions.verify(message.options);
+                        var error = $root.google.protobuf.FileOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
                     if (message.sourceCodeInfo != null && message.hasOwnProperty("sourceCodeInfo")) {
-                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo);
+                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo, long + 1);
                         if (error)
                             return "sourceCodeInfo." + error;
                     }
@@ -204795,9 +213591,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto
                  */
-                FileDescriptorProto.fromObject = function fromObject(object) {
+                FileDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -204838,7 +213638,7 @@
                         for (var i = 0; i < object.messageType.length; ++i) {
                             if (typeof object.messageType[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.messageType: object expected");
-                            message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i]);
+                            message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i], long + 1);
                         }
                     }
                     if (object.enumType) {
@@ -204848,7 +213648,7 @@
                         for (var i = 0; i < object.enumType.length; ++i) {
                             if (typeof object.enumType[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.enumType: object expected");
-                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]);
+                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i], long + 1);
                         }
                     }
                     if (object.service) {
@@ -204858,7 +213658,7 @@
                         for (var i = 0; i < object.service.length; ++i) {
                             if (typeof object.service[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.service: object expected");
-                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i]);
+                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i], long + 1);
                         }
                     }
                     if (object.extension) {
@@ -204868,18 +213668,18 @@
                         for (var i = 0; i < object.extension.length; ++i) {
                             if (typeof object.extension[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.extension: object expected");
-                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
+                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.FileDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options, long + 1);
                     }
                     if (object.sourceCodeInfo != null) {
                         if (typeof object.sourceCodeInfo !== "object")
                             throw TypeError(".google.protobuf.FileDescriptorProto.sourceCodeInfo: object expected");
-                        message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo);
+                        message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo, long + 1);
                     }
                     if (object.syntax != null)
                         message.syntax = String(object.syntax);
@@ -205095,7 +213895,7 @@
                     this.reservedName = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -205268,9 +214068,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DescriptorProto.decode = function decode(reader, length, error) {
+                DescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -205284,47 +214088,47 @@
                         case 2: {
                                 if (!(message.field && message.field.length))
                                     message.field = [];
-                                message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 6: {
                                 if (!(message.extension && message.extension.length))
                                     message.extension = [];
-                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
                                 if (!(message.nestedType && message.nestedType.length))
                                     message.nestedType = [];
-                                message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
+                                message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 4: {
                                 if (!(message.enumType && message.enumType.length))
                                     message.enumType = [];
-                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
+                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
                                 if (!(message.extensionRange && message.extensionRange.length))
                                     message.extensionRange = [];
-                                message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32()));
+                                message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 8: {
                                 if (!(message.oneofDecl && message.oneofDecl.length))
                                     message.oneofDecl = [];
-                                message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32()));
+                                message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 7: {
-                                message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 9: {
                                 if (!(message.reservedRange && message.reservedRange.length))
                                     message.reservedRange = [];
-                                message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32()));
+                                message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 10: {
@@ -205338,7 +214142,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -205369,9 +214173,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DescriptorProto.verify = function verify(message) {
+                DescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -205379,7 +214187,7 @@
                         if (!Array.isArray(message.field))
                             return "field: array expected";
                         for (var i = 0; i < message.field.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i], long + 1);
                             if (error)
                                 return "field." + error;
                         }
@@ -205388,7 +214196,7 @@
                         if (!Array.isArray(message.extension))
                             return "extension: array expected";
                         for (var i = 0; i < message.extension.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i], long + 1);
                             if (error)
                                 return "extension." + error;
                         }
@@ -205397,7 +214205,7 @@
                         if (!Array.isArray(message.nestedType))
                             return "nestedType: array expected";
                         for (var i = 0; i < message.nestedType.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i]);
+                            var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i], long + 1);
                             if (error)
                                 return "nestedType." + error;
                         }
@@ -205406,7 +214214,7 @@
                         if (!Array.isArray(message.enumType))
                             return "enumType: array expected";
                         for (var i = 0; i < message.enumType.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i], long + 1);
                             if (error)
                                 return "enumType." + error;
                         }
@@ -205415,7 +214223,7 @@
                         if (!Array.isArray(message.extensionRange))
                             return "extensionRange: array expected";
                         for (var i = 0; i < message.extensionRange.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i]);
+                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i], long + 1);
                             if (error)
                                 return "extensionRange." + error;
                         }
@@ -205424,13 +214232,13 @@
                         if (!Array.isArray(message.oneofDecl))
                             return "oneofDecl: array expected";
                         for (var i = 0; i < message.oneofDecl.length; ++i) {
-                            var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i]);
+                            var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i], long + 1);
                             if (error)
                                 return "oneofDecl." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.MessageOptions.verify(message.options);
+                        var error = $root.google.protobuf.MessageOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -205438,7 +214246,7 @@
                         if (!Array.isArray(message.reservedRange))
                             return "reservedRange: array expected";
                         for (var i = 0; i < message.reservedRange.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i]);
+                            var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i], long + 1);
                             if (error)
                                 return "reservedRange." + error;
                         }
@@ -205470,9 +214278,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.DescriptorProto} DescriptorProto
                  */
-                DescriptorProto.fromObject = function fromObject(object) {
+                DescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.DescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.DescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -205483,7 +214295,7 @@
                         for (var i = 0; i < object.field.length; ++i) {
                             if (typeof object.field[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.field: object expected");
-                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i]);
+                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i], long + 1);
                         }
                     }
                     if (object.extension) {
@@ -205493,7 +214305,7 @@
                         for (var i = 0; i < object.extension.length; ++i) {
                             if (typeof object.extension[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.extension: object expected");
-                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
+                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i], long + 1);
                         }
                     }
                     if (object.nestedType) {
@@ -205503,7 +214315,7 @@
                         for (var i = 0; i < object.nestedType.length; ++i) {
                             if (typeof object.nestedType[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.nestedType: object expected");
-                            message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i]);
+                            message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i], long + 1);
                         }
                     }
                     if (object.enumType) {
@@ -205513,7 +214325,7 @@
                         for (var i = 0; i < object.enumType.length; ++i) {
                             if (typeof object.enumType[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.enumType: object expected");
-                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]);
+                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i], long + 1);
                         }
                     }
                     if (object.extensionRange) {
@@ -205523,7 +214335,7 @@
                         for (var i = 0; i < object.extensionRange.length; ++i) {
                             if (typeof object.extensionRange[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.extensionRange: object expected");
-                            message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i]);
+                            message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i], long + 1);
                         }
                     }
                     if (object.oneofDecl) {
@@ -205533,13 +214345,13 @@
                         for (var i = 0; i < object.oneofDecl.length; ++i) {
                             if (typeof object.oneofDecl[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.oneofDecl: object expected");
-                            message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i]);
+                            message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.DescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options, long + 1);
                     }
                     if (object.reservedRange) {
                         if (!Array.isArray(object.reservedRange))
@@ -205548,7 +214360,7 @@
                         for (var i = 0; i < object.reservedRange.length; ++i) {
                             if (typeof object.reservedRange[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.reservedRange: object expected");
-                            message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i]);
+                            message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i], long + 1);
                         }
                     }
                     if (object.reservedName) {
@@ -205706,7 +214518,7 @@
                     function ExtensionRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -205791,9 +214603,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ExtensionRange.decode = function decode(reader, length, error) {
+                    ExtensionRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -205809,11 +214625,11 @@
                                     break;
                                 }
                             case 3: {
-                                    message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32());
+                                    message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -205844,9 +214660,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ExtensionRange.verify = function verify(message) {
+                    ExtensionRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -205854,7 +214674,7 @@
                             if (!$util.isInteger(message.end))
                                 return "end: integer expected";
                         if (message.options != null && message.hasOwnProperty("options")) {
-                            var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options);
+                            var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options, long + 1);
                             if (error)
                                 return "options." + error;
                         }
@@ -205869,9 +214689,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange
                      */
-                    ExtensionRange.fromObject = function fromObject(object) {
+                    ExtensionRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.DescriptorProto.ExtensionRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -205880,7 +214704,7 @@
                         if (object.options != null) {
                             if (typeof object.options !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.ExtensionRange.options: object expected");
-                            message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options);
+                            message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options, long + 1);
                         }
                         return message;
                     };
@@ -205962,7 +214786,7 @@
                     function ReservedRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -206037,9 +214861,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ReservedRange.decode = function decode(reader, length, error) {
+                    ReservedRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ReservedRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -206055,7 +214883,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -206086,9 +214914,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ReservedRange.verify = function verify(message) {
+                    ReservedRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -206106,9 +214938,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange
                      */
-                    ReservedRange.fromObject = function fromObject(object) {
+                    ReservedRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.DescriptorProto.ReservedRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.DescriptorProto.ReservedRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -206198,7 +215034,7 @@
                     this.declaration = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -206295,9 +215131,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ExtensionRangeOptions.decode = function decode(reader, length, error) {
+                ExtensionRangeOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -206307,17 +215147,17 @@
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
                                 if (!(message.declaration && message.declaration.length))
                                     message.declaration = [];
-                                message.declaration.push($root.google.protobuf.ExtensionRangeOptions.Declaration.decode(reader, reader.uint32()));
+                                message.declaration.push($root.google.protobuf.ExtensionRangeOptions.Declaration.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 50: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -206325,7 +215165,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -206356,14 +215196,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ExtensionRangeOptions.verify = function verify(message) {
+                ExtensionRangeOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) {
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -206372,13 +215216,13 @@
                         if (!Array.isArray(message.declaration))
                             return "declaration: array expected";
                         for (var i = 0; i < message.declaration.length; ++i) {
-                            var error = $root.google.protobuf.ExtensionRangeOptions.Declaration.verify(message.declaration[i]);
+                            var error = $root.google.protobuf.ExtensionRangeOptions.Declaration.verify(message.declaration[i], long + 1);
                             if (error)
                                 return "declaration." + error;
                         }
                     }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -206401,9 +215245,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions
                  */
-                ExtensionRangeOptions.fromObject = function fromObject(object) {
+                ExtensionRangeOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ExtensionRangeOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ExtensionRangeOptions();
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -206412,7 +215260,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.ExtensionRangeOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object.declaration) {
@@ -206422,13 +215270,13 @@
                         for (var i = 0; i < object.declaration.length; ++i) {
                             if (typeof object.declaration[i] !== "object")
                                 throw TypeError(".google.protobuf.ExtensionRangeOptions.declaration: object expected");
-                            message.declaration[i] = $root.google.protobuf.ExtensionRangeOptions.Declaration.fromObject(object.declaration[i]);
+                            message.declaration[i] = $root.google.protobuf.ExtensionRangeOptions.Declaration.fromObject(object.declaration[i], long + 1);
                         }
                     }
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.ExtensionRangeOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     switch (object.verification) {
                     case "DECLARATION":
@@ -206537,7 +215385,7 @@
                     function Declaration(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -206642,9 +215490,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Declaration.decode = function decode(reader, length, error) {
+                    Declaration.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions.Declaration();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -206672,7 +215524,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -206703,9 +215555,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Declaration.verify = function verify(message) {
+                    Declaration.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.number != null && message.hasOwnProperty("number"))
                             if (!$util.isInteger(message.number))
                                 return "number: integer expected";
@@ -206732,9 +215588,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.ExtensionRangeOptions.Declaration} Declaration
                      */
-                    Declaration.fromObject = function fromObject(object) {
+                    Declaration.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.ExtensionRangeOptions.Declaration)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.ExtensionRangeOptions.Declaration();
                         if (object.number != null)
                             message.number = object.number | 0;
@@ -206858,7 +215718,7 @@
                 function FieldDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -207023,9 +215883,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldDescriptorProto.decode = function decode(reader, length, error) {
+                FieldDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -207069,7 +215933,7 @@
                                 break;
                             }
                         case 8: {
-                                message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 17: {
@@ -207077,7 +215941,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -207108,9 +215972,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldDescriptorProto.verify = function verify(message) {
+                FieldDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -207166,7 +216034,7 @@
                         if (!$util.isString(message.jsonName))
                             return "jsonName: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.FieldOptions.verify(message.options);
+                        var error = $root.google.protobuf.FieldOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -207184,9 +216052,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto
                  */
-                FieldDescriptorProto.fromObject = function fromObject(object) {
+                FieldDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -207305,7 +216177,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.FieldDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options, long + 1);
                     }
                     if (object.proto3Optional != null)
                         message.proto3Optional = Boolean(object.proto3Optional);
@@ -207475,7 +216347,7 @@
                 function OneofDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -207550,9 +216422,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OneofDescriptorProto.decode = function decode(reader, length, error) {
+                OneofDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -207564,11 +216440,11 @@
                                 break;
                             }
                         case 2: {
-                                message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -207599,14 +216475,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OneofDescriptorProto.verify = function verify(message) {
+                OneofDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.OneofOptions.verify(message.options);
+                        var error = $root.google.protobuf.OneofOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -207621,16 +216501,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto
                  */
-                OneofDescriptorProto.fromObject = function fromObject(object) {
+                OneofDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.OneofDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.OneofDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.OneofDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.OneofOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.OneofOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -207716,7 +216600,7 @@
                     this.reservedName = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -207834,9 +216718,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumDescriptorProto.decode = function decode(reader, length, error) {
+                EnumDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -207850,17 +216738,17 @@
                         case 2: {
                                 if (!(message.value && message.value.length))
                                     message.value = [];
-                                message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32()));
+                                message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 4: {
                                 if (!(message.reservedRange && message.reservedRange.length))
                                     message.reservedRange = [];
-                                message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32()));
+                                message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
@@ -207874,7 +216762,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -207905,9 +216793,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumDescriptorProto.verify = function verify(message) {
+                EnumDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -207915,13 +216807,13 @@
                         if (!Array.isArray(message.value))
                             return "value: array expected";
                         for (var i = 0; i < message.value.length; ++i) {
-                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i]);
+                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i], long + 1);
                             if (error)
                                 return "value." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.EnumOptions.verify(message.options);
+                        var error = $root.google.protobuf.EnumOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -207929,7 +216821,7 @@
                         if (!Array.isArray(message.reservedRange))
                             return "reservedRange: array expected";
                         for (var i = 0; i < message.reservedRange.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i], long + 1);
                             if (error)
                                 return "reservedRange." + error;
                         }
@@ -207961,9 +216853,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto
                  */
-                EnumDescriptorProto.fromObject = function fromObject(object) {
+                EnumDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -207974,13 +216870,13 @@
                         for (var i = 0; i < object.value.length; ++i) {
                             if (typeof object.value[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumDescriptorProto.value: object expected");
-                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i]);
+                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.EnumDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options, long + 1);
                     }
                     if (object.reservedRange) {
                         if (!Array.isArray(object.reservedRange))
@@ -207989,7 +216885,7 @@
                         for (var i = 0; i < object.reservedRange.length; ++i) {
                             if (typeof object.reservedRange[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumDescriptorProto.reservedRange: object expected");
-                            message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i]);
+                            message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i], long + 1);
                         }
                     }
                     if (object.reservedName) {
@@ -208116,7 +217012,7 @@
                     function EnumReservedRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -208191,9 +217087,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    EnumReservedRange.decode = function decode(reader, length, error) {
+                    EnumReservedRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -208209,7 +217109,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -208240,9 +217140,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    EnumReservedRange.verify = function verify(message) {
+                    EnumReservedRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -208260,9 +217164,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange
                      */
-                    EnumReservedRange.fromObject = function fromObject(object) {
+                    EnumReservedRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.EnumDescriptorProto.EnumReservedRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -208349,7 +217257,7 @@
                 function EnumValueDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -208434,9 +217342,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumValueDescriptorProto.decode = function decode(reader, length, error) {
+                EnumValueDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -208452,11 +217364,11 @@
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -208487,9 +217399,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumValueDescriptorProto.verify = function verify(message) {
+                EnumValueDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -208497,7 +217413,7 @@
                         if (!$util.isInteger(message.number))
                             return "number: integer expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options);
+                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -208512,9 +217428,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto
                  */
-                EnumValueDescriptorProto.fromObject = function fromObject(object) {
+                EnumValueDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumValueDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumValueDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -208523,7 +217443,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.EnumValueDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -208607,7 +217527,7 @@
                     this.method = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -208693,9 +217613,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ServiceDescriptorProto.decode = function decode(reader, length, error) {
+                ServiceDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -208709,15 +217633,15 @@
                         case 2: {
                                 if (!(message.method && message.method.length))
                                     message.method = [];
-                                message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32()));
+                                message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -208748,9 +217672,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ServiceDescriptorProto.verify = function verify(message) {
+                ServiceDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -208758,13 +217686,13 @@
                         if (!Array.isArray(message.method))
                             return "method: array expected";
                         for (var i = 0; i < message.method.length; ++i) {
-                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i]);
+                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i], long + 1);
                             if (error)
                                 return "method." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.ServiceOptions.verify(message.options);
+                        var error = $root.google.protobuf.ServiceOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -208779,9 +217707,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto
                  */
-                ServiceDescriptorProto.fromObject = function fromObject(object) {
+                ServiceDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ServiceDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ServiceDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -208792,13 +217724,13 @@
                         for (var i = 0; i < object.method.length; ++i) {
                             if (typeof object.method[i] !== "object")
                                 throw TypeError(".google.protobuf.ServiceDescriptorProto.method: object expected");
-                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i]);
+                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.ServiceDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -208888,7 +217820,7 @@
                 function MethodDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -209003,9 +217935,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodDescriptorProto.decode = function decode(reader, length, error) {
+                MethodDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -209025,7 +217961,7 @@
                                 break;
                             }
                         case 4: {
-                                message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 5: {
@@ -209037,7 +217973,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -209068,9 +218004,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodDescriptorProto.verify = function verify(message) {
+                MethodDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -209081,7 +218021,7 @@
                         if (!$util.isString(message.outputType))
                             return "outputType: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.MethodOptions.verify(message.options);
+                        var error = $root.google.protobuf.MethodOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -209102,9 +218042,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto
                  */
-                MethodDescriptorProto.fromObject = function fromObject(object) {
+                MethodDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MethodDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MethodDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -209115,7 +218059,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.MethodDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options, long + 1);
                     }
                     if (object.clientStreaming != null)
                         message.clientStreaming = Boolean(object.clientStreaming);
@@ -209232,7 +218176,7 @@
                     this[".google.api.resourceDefinition"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -209509,9 +218453,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileOptions.decode = function decode(reader, length, error) {
+                FileOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -209595,23 +218543,23 @@
                                 break;
                             }
                         case 50: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1053: {
                                 if (!(message[".google.api.resourceDefinition"] && message[".google.api.resourceDefinition"].length))
                                     message[".google.api.resourceDefinition"] = [];
-                                message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32()));
+                                message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -209642,9 +218590,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileOptions.verify = function verify(message) {
+                FileOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.javaPackage != null && message.hasOwnProperty("javaPackage"))
                         if (!$util.isString(message.javaPackage))
                             return "javaPackage: string expected";
@@ -209709,7 +218661,7 @@
                         if (!$util.isString(message.rubyPackage))
                             return "rubyPackage: string expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -209717,7 +218669,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -209726,7 +218678,7 @@
                         if (!Array.isArray(message[".google.api.resourceDefinition"]))
                             return ".google.api.resourceDefinition: array expected";
                         for (var i = 0; i < message[".google.api.resourceDefinition"].length; ++i) {
-                            var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i]);
+                            var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i], long + 1);
                             if (error)
                                 return ".google.api.resourceDefinition." + error;
                         }
@@ -209742,9 +218694,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileOptions} FileOptions
                  */
-                FileOptions.fromObject = function fromObject(object) {
+                FileOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileOptions();
                     if (object.javaPackage != null)
                         message.javaPackage = String(object.javaPackage);
@@ -209805,7 +218761,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.FileOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -209814,7 +218770,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.FileOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.resourceDefinition"]) {
@@ -209824,7 +218780,7 @@
                         for (var i = 0; i < object[".google.api.resourceDefinition"].length; ++i) {
                             if (typeof object[".google.api.resourceDefinition"][i] !== "object")
                                 throw TypeError(".google.protobuf.FileOptions..google.api.resourceDefinition: object expected");
-                            message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i]);
+                            message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i], long + 1);
                         }
                     }
                     return message;
@@ -209995,7 +218951,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -210131,9 +219087,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MessageOptions.decode = function decode(reader, length, error) {
+                MessageOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MessageOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -210161,21 +219121,21 @@
                                 break;
                             }
                         case 12: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1053: {
-                                message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32());
+                                message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -210206,9 +219166,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MessageOptions.verify = function verify(message) {
+                MessageOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.messageSetWireFormat != null && message.hasOwnProperty("messageSetWireFormat"))
                         if (typeof message.messageSetWireFormat !== "boolean")
                             return "messageSetWireFormat: boolean expected";
@@ -210225,7 +219189,7 @@
                         if (typeof message.deprecatedLegacyJsonFieldConflicts !== "boolean")
                             return "deprecatedLegacyJsonFieldConflicts: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -210233,13 +219197,13 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
                     }
                     if (message[".google.api.resource"] != null && message.hasOwnProperty(".google.api.resource")) {
-                        var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"]);
+                        var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"], long + 1);
                         if (error)
                             return ".google.api.resource." + error;
                     }
@@ -210254,9 +219218,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MessageOptions} MessageOptions
                  */
-                MessageOptions.fromObject = function fromObject(object) {
+                MessageOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MessageOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MessageOptions();
                     if (object.messageSetWireFormat != null)
                         message.messageSetWireFormat = Boolean(object.messageSetWireFormat);
@@ -210271,7 +219239,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.MessageOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -210280,13 +219248,13 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.MessageOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.resource"] != null) {
                         if (typeof object[".google.api.resource"] !== "object")
                             throw TypeError(".google.protobuf.MessageOptions..google.api.resource: object expected");
-                        message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"]);
+                        message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"], long + 1);
                     }
                     return message;
                 };
@@ -210405,7 +219373,7 @@
                     this[".google.api.fieldBehavior"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -210624,9 +219592,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldOptions.decode = function decode(reader, length, error) {
+                FieldOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -210683,21 +219655,21 @@
                         case 20: {
                                 if (!(message.editionDefaults && message.editionDefaults.length))
                                     message.editionDefaults = [];
-                                message.editionDefaults.push($root.google.protobuf.FieldOptions.EditionDefault.decode(reader, reader.uint32()));
+                                message.editionDefaults.push($root.google.protobuf.FieldOptions.EditionDefault.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 21: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 22: {
-                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32());
+                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1052: {
@@ -210712,11 +219684,11 @@
                                 break;
                             }
                         case 1055: {
-                                message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32());
+                                message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -210747,9 +219719,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldOptions.verify = function verify(message) {
+                FieldOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.ctype != null && message.hasOwnProperty("ctype"))
                         switch (message.ctype) {
                         default:
@@ -210819,18 +219795,18 @@
                         if (!Array.isArray(message.editionDefaults))
                             return "editionDefaults: array expected";
                         for (var i = 0; i < message.editionDefaults.length; ++i) {
-                            var error = $root.google.protobuf.FieldOptions.EditionDefault.verify(message.editionDefaults[i]);
+                            var error = $root.google.protobuf.FieldOptions.EditionDefault.verify(message.editionDefaults[i], long + 1);
                             if (error)
                                 return "editionDefaults." + error;
                         }
                     }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
                     if (message.featureSupport != null && message.hasOwnProperty("featureSupport")) {
-                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport);
+                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport, long + 1);
                         if (error)
                             return "featureSupport." + error;
                     }
@@ -210838,7 +219814,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -210863,7 +219839,7 @@
                             }
                     }
                     if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) {
-                        var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"]);
+                        var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"], long + 1);
                         if (error)
                             return ".google.api.resourceReference." + error;
                     }
@@ -210878,9 +219854,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldOptions} FieldOptions
                  */
-                FieldOptions.fromObject = function fromObject(object) {
+                FieldOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldOptions();
                     switch (object.ctype) {
                     default:
@@ -211014,18 +219994,18 @@
                         for (var i = 0; i < object.editionDefaults.length; ++i) {
                             if (typeof object.editionDefaults[i] !== "object")
                                 throw TypeError(".google.protobuf.FieldOptions.editionDefaults: object expected");
-                            message.editionDefaults[i] = $root.google.protobuf.FieldOptions.EditionDefault.fromObject(object.editionDefaults[i]);
+                            message.editionDefaults[i] = $root.google.protobuf.FieldOptions.EditionDefault.fromObject(object.editionDefaults[i], long + 1);
                         }
                     }
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.FieldOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.featureSupport != null) {
                         if (typeof object.featureSupport !== "object")
                             throw TypeError(".google.protobuf.FieldOptions.featureSupport: object expected");
-                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport);
+                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -211034,7 +220014,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.FieldOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.fieldBehavior"]) {
@@ -211089,7 +220069,7 @@
                     if (object[".google.api.resourceReference"] != null) {
                         if (typeof object[".google.api.resourceReference"] !== "object")
                             throw TypeError(".google.protobuf.FieldOptions..google.api.resourceReference: object expected");
-                        message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"]);
+                        message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"], long + 1);
                     }
                     return message;
                 };
@@ -211299,7 +220279,7 @@
                     function EditionDefault(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -211374,9 +220354,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    EditionDefault.decode = function decode(reader, length, error) {
+                    EditionDefault.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions.EditionDefault();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -211392,7 +220376,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -211423,9 +220407,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    EditionDefault.verify = function verify(message) {
+                    EditionDefault.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.edition != null && message.hasOwnProperty("edition"))
                             switch (message.edition) {
                             default:
@@ -211458,9 +220446,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FieldOptions.EditionDefault} EditionDefault
                      */
-                    EditionDefault.fromObject = function fromObject(object) {
+                    EditionDefault.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FieldOptions.EditionDefault)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FieldOptions.EditionDefault();
                         switch (object.edition) {
                         default:
@@ -211599,7 +220591,7 @@
                     function FeatureSupport(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -211694,9 +220686,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    FeatureSupport.decode = function decode(reader, length, error) {
+                    FeatureSupport.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions.FeatureSupport();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -211720,7 +220716,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -211751,9 +220747,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    FeatureSupport.verify = function verify(message) {
+                    FeatureSupport.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.editionIntroduced != null && message.hasOwnProperty("editionIntroduced"))
                             switch (message.editionIntroduced) {
                             default:
@@ -211822,9 +220822,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FieldOptions.FeatureSupport} FeatureSupport
                      */
-                    FeatureSupport.fromObject = function fromObject(object) {
+                    FeatureSupport.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FieldOptions.FeatureSupport)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FieldOptions.FeatureSupport();
                         switch (object.editionIntroduced) {
                         default:
@@ -212083,7 +221087,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -212159,9 +221163,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OneofOptions.decode = function decode(reader, length, error) {
+                OneofOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -212169,17 +221177,17 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -212210,11 +221218,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OneofOptions.verify = function verify(message) {
+                OneofOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -212222,7 +221234,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -212238,14 +221250,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.OneofOptions} OneofOptions
                  */
-                OneofOptions.fromObject = function fromObject(object) {
+                OneofOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.OneofOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.OneofOptions();
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.OneofOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -212254,7 +221270,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.OneofOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -212341,7 +221357,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -212447,9 +221463,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumOptions.decode = function decode(reader, length, error) {
+                EnumOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -212469,17 +221489,17 @@
                                 break;
                             }
                         case 7: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -212510,9 +221530,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumOptions.verify = function verify(message) {
+                EnumOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.allowAlias != null && message.hasOwnProperty("allowAlias"))
                         if (typeof message.allowAlias !== "boolean")
                             return "allowAlias: boolean expected";
@@ -212523,7 +221547,7 @@
                         if (typeof message.deprecatedLegacyJsonFieldConflicts !== "boolean")
                             return "deprecatedLegacyJsonFieldConflicts: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -212531,7 +221555,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -212547,9 +221571,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumOptions} EnumOptions
                  */
-                EnumOptions.fromObject = function fromObject(object) {
+                EnumOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumOptions();
                     if (object.allowAlias != null)
                         message.allowAlias = Boolean(object.allowAlias);
@@ -212560,7 +221588,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.EnumOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -212569,7 +221597,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -212666,7 +221694,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -212772,9 +221800,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumValueOptions.decode = function decode(reader, length, error) {
+                EnumValueOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -212786,7 +221818,7 @@
                                 break;
                             }
                         case 2: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -212794,17 +221826,17 @@
                                 break;
                             }
                         case 4: {
-                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32());
+                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -212835,14 +221867,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumValueOptions.verify = function verify(message) {
+                EnumValueOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                         if (typeof message.deprecated !== "boolean")
                             return "deprecated: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -212850,7 +221886,7 @@
                         if (typeof message.debugRedact !== "boolean")
                             return "debugRedact: boolean expected";
                     if (message.featureSupport != null && message.hasOwnProperty("featureSupport")) {
-                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport);
+                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport, long + 1);
                         if (error)
                             return "featureSupport." + error;
                     }
@@ -212858,7 +221894,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -212874,23 +221910,27 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumValueOptions} EnumValueOptions
                  */
-                EnumValueOptions.fromObject = function fromObject(object) {
+                EnumValueOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumValueOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumValueOptions();
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.EnumValueOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.debugRedact != null)
                         message.debugRedact = Boolean(object.debugRedact);
                     if (object.featureSupport != null) {
                         if (typeof object.featureSupport !== "object")
                             throw TypeError(".google.protobuf.EnumValueOptions.featureSupport: object expected");
-                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport);
+                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -212899,7 +221939,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumValueOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -212997,7 +222037,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -213113,9 +222153,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ServiceOptions.decode = function decode(reader, length, error) {
+                ServiceOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -213123,7 +222167,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 34: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 33: {
@@ -213133,7 +222177,7 @@
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1049: {
@@ -213149,7 +222193,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -213180,11 +222224,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ServiceOptions.verify = function verify(message) {
+                ServiceOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -213195,7 +222243,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -213220,14 +222268,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ServiceOptions} ServiceOptions
                  */
-                ServiceOptions.fromObject = function fromObject(object) {
+                ServiceOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ServiceOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ServiceOptions();
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.ServiceOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
@@ -213238,7 +222290,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.ServiceOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.defaultHost"] != null)
@@ -213347,7 +222399,7 @@
                     this[".google.api.methodSignature"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -213474,9 +222526,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodOptions.decode = function decode(reader, length, error) {
+                MethodOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -213492,17 +222548,17 @@
                                 break;
                             }
                         case 35: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 72295728: {
-                                message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32());
+                                message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 1051: {
@@ -213512,11 +222568,11 @@
                                 break;
                             }
                         case 1049: {
-                                message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32());
+                                message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -213547,9 +222603,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodOptions.verify = function verify(message) {
+                MethodOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                         if (typeof message.deprecated !== "boolean")
                             return "deprecated: boolean expected";
@@ -213563,7 +222623,7 @@
                             break;
                         }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -213571,13 +222631,13 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
                     }
                     if (message[".google.api.http"] != null && message.hasOwnProperty(".google.api.http")) {
-                        var error = $root.google.api.HttpRule.verify(message[".google.api.http"]);
+                        var error = $root.google.api.HttpRule.verify(message[".google.api.http"], long + 1);
                         if (error)
                             return ".google.api.http." + error;
                     }
@@ -213589,7 +222649,7 @@
                                 return ".google.api.methodSignature: string[] expected";
                     }
                     if (message[".google.longrunning.operationInfo"] != null && message.hasOwnProperty(".google.longrunning.operationInfo")) {
-                        var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"]);
+                        var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"], long + 1);
                         if (error)
                             return ".google.longrunning.operationInfo." + error;
                     }
@@ -213604,9 +222664,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MethodOptions} MethodOptions
                  */
-                MethodOptions.fromObject = function fromObject(object) {
+                MethodOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MethodOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MethodOptions();
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
@@ -213633,7 +222697,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.MethodOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -213642,13 +222706,13 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.MethodOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.http"] != null) {
                         if (typeof object[".google.api.http"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.api.http: object expected");
-                        message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"]);
+                        message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"], long + 1);
                     }
                     if (object[".google.api.methodSignature"]) {
                         if (!Array.isArray(object[".google.api.methodSignature"]))
@@ -213660,7 +222724,7 @@
                     if (object[".google.longrunning.operationInfo"] != null) {
                         if (typeof object[".google.longrunning.operationInfo"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.longrunning.operationInfo: object expected");
-                        message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"]);
+                        message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"], long + 1);
                     }
                     return message;
                 };
@@ -213784,7 +222848,7 @@
                     this.name = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -213910,9 +222974,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                UninterpretedOption.decode = function decode(reader, length, error) {
+                UninterpretedOption.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -213922,7 +222990,7 @@
                         case 2: {
                                 if (!(message.name && message.name.length))
                                     message.name = [];
-                                message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32()));
+                                message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
@@ -213950,7 +223018,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -213981,14 +223049,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                UninterpretedOption.verify = function verify(message) {
+                UninterpretedOption.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name")) {
                         if (!Array.isArray(message.name))
                             return "name: array expected";
                         for (var i = 0; i < message.name.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i], long + 1);
                             if (error)
                                 return "name." + error;
                         }
@@ -214022,9 +223094,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.UninterpretedOption} UninterpretedOption
                  */
-                UninterpretedOption.fromObject = function fromObject(object) {
+                UninterpretedOption.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.UninterpretedOption)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.UninterpretedOption();
                     if (object.name) {
                         if (!Array.isArray(object.name))
@@ -214033,7 +223109,7 @@
                         for (var i = 0; i < object.name.length; ++i) {
                             if (typeof object.name[i] !== "object")
                                 throw TypeError(".google.protobuf.UninterpretedOption.name: object expected");
-                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i]);
+                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i], long + 1);
                         }
                     }
                     if (object.identifierValue != null)
@@ -214178,7 +223254,7 @@
                     function NamePart(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -214251,9 +223327,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    NamePart.decode = function decode(reader, length, error) {
+                    NamePart.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption.NamePart();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -214269,7 +223349,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -214304,9 +223384,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    NamePart.verify = function verify(message) {
+                    NamePart.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (!$util.isString(message.namePart))
                             return "namePart: string expected";
                         if (typeof message.isExtension !== "boolean")
@@ -214322,9 +223406,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart
                      */
-                    NamePart.fromObject = function fromObject(object) {
+                    NamePart.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.UninterpretedOption.NamePart)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.UninterpretedOption.NamePart();
                         if (object.namePart != null)
                             message.namePart = String(object.namePart);
@@ -214416,7 +223504,7 @@
                 function FeatureSet(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -214551,9 +223639,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FeatureSet.decode = function decode(reader, length, error) {
+                FeatureSet.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSet();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -214593,7 +223685,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -214624,9 +223716,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FeatureSet.verify = function verify(message) {
+                FeatureSet.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.fieldPresence != null && message.hasOwnProperty("fieldPresence"))
                         switch (message.fieldPresence) {
                         default:
@@ -214713,9 +223809,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FeatureSet} FeatureSet
                  */
-                FeatureSet.fromObject = function fromObject(object) {
+                FeatureSet.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FeatureSet)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FeatureSet();
                     switch (object.fieldPresence) {
                     default:
@@ -215093,7 +224193,7 @@
                     function VisibilityFeature(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -215148,9 +224248,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    VisibilityFeature.decode = function decode(reader, length, error) {
+                    VisibilityFeature.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSet.VisibilityFeature();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -215158,7 +224262,7 @@
                                 break;
                             switch (tag >>> 3) {
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -215189,9 +224293,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    VisibilityFeature.verify = function verify(message) {
+                    VisibilityFeature.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         return null;
                     };
     
@@ -215203,9 +224311,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FeatureSet.VisibilityFeature} VisibilityFeature
                      */
-                    VisibilityFeature.fromObject = function fromObject(object) {
+                    VisibilityFeature.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FeatureSet.VisibilityFeature)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         return new $root.google.protobuf.FeatureSet.VisibilityFeature();
                     };
     
@@ -215297,7 +224409,7 @@
                     this.defaults = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -215383,9 +224495,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FeatureSetDefaults.decode = function decode(reader, length, error) {
+                FeatureSetDefaults.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSetDefaults();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -215395,7 +224511,7 @@
                         case 1: {
                                 if (!(message.defaults && message.defaults.length))
                                     message.defaults = [];
-                                message.defaults.push($root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.decode(reader, reader.uint32()));
+                                message.defaults.push($root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 4: {
@@ -215407,7 +224523,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -215438,14 +224554,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FeatureSetDefaults.verify = function verify(message) {
+                FeatureSetDefaults.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.defaults != null && message.hasOwnProperty("defaults")) {
                         if (!Array.isArray(message.defaults))
                             return "defaults: array expected";
                         for (var i = 0; i < message.defaults.length; ++i) {
-                            var error = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify(message.defaults[i]);
+                            var error = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify(message.defaults[i], long + 1);
                             if (error)
                                 return "defaults." + error;
                         }
@@ -215497,9 +224617,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FeatureSetDefaults} FeatureSetDefaults
                  */
-                FeatureSetDefaults.fromObject = function fromObject(object) {
+                FeatureSetDefaults.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FeatureSetDefaults)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FeatureSetDefaults();
                     if (object.defaults) {
                         if (!Array.isArray(object.defaults))
@@ -215508,7 +224632,7 @@
                         for (var i = 0; i < object.defaults.length; ++i) {
                             if (typeof object.defaults[i] !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.defaults: object expected");
-                            message.defaults[i] = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fromObject(object.defaults[i]);
+                            message.defaults[i] = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fromObject(object.defaults[i], long + 1);
                         }
                     }
                     switch (object.minimumEdition) {
@@ -215705,7 +224829,7 @@
                     function FeatureSetEditionDefault(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -215790,9 +224914,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    FeatureSetEditionDefault.decode = function decode(reader, length, error) {
+                    FeatureSetEditionDefault.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -215804,15 +224932,15 @@
                                     break;
                                 }
                             case 4: {
-                                    message.overridableFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                    message.overridableFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 5: {
-                                    message.fixedFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                    message.fixedFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -215843,9 +224971,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    FeatureSetEditionDefault.verify = function verify(message) {
+                    FeatureSetEditionDefault.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.edition != null && message.hasOwnProperty("edition"))
                             switch (message.edition) {
                             default:
@@ -215865,12 +224997,12 @@
                                 break;
                             }
                         if (message.overridableFeatures != null && message.hasOwnProperty("overridableFeatures")) {
-                            var error = $root.google.protobuf.FeatureSet.verify(message.overridableFeatures);
+                            var error = $root.google.protobuf.FeatureSet.verify(message.overridableFeatures, long + 1);
                             if (error)
                                 return "overridableFeatures." + error;
                         }
                         if (message.fixedFeatures != null && message.hasOwnProperty("fixedFeatures")) {
-                            var error = $root.google.protobuf.FeatureSet.verify(message.fixedFeatures);
+                            var error = $root.google.protobuf.FeatureSet.verify(message.fixedFeatures, long + 1);
                             if (error)
                                 return "fixedFeatures." + error;
                         }
@@ -215885,9 +225017,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault} FeatureSetEditionDefault
                      */
-                    FeatureSetEditionDefault.fromObject = function fromObject(object) {
+                    FeatureSetEditionDefault.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault();
                         switch (object.edition) {
                         default:
@@ -215948,12 +225084,12 @@
                         if (object.overridableFeatures != null) {
                             if (typeof object.overridableFeatures !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridableFeatures: object expected");
-                            message.overridableFeatures = $root.google.protobuf.FeatureSet.fromObject(object.overridableFeatures);
+                            message.overridableFeatures = $root.google.protobuf.FeatureSet.fromObject(object.overridableFeatures, long + 1);
                         }
                         if (object.fixedFeatures != null) {
                             if (typeof object.fixedFeatures !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixedFeatures: object expected");
-                            message.fixedFeatures = $root.google.protobuf.FeatureSet.fromObject(object.fixedFeatures);
+                            message.fixedFeatures = $root.google.protobuf.FeatureSet.fromObject(object.fixedFeatures, long + 1);
                         }
                         return message;
                     };
@@ -216038,7 +225174,7 @@
                     this.location = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -216104,9 +225240,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                SourceCodeInfo.decode = function decode(reader, length, error) {
+                SourceCodeInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -216116,11 +225256,11 @@
                         case 1: {
                                 if (!(message.location && message.location.length))
                                     message.location = [];
-                                message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32()));
+                                message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -216151,14 +225291,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                SourceCodeInfo.verify = function verify(message) {
+                SourceCodeInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.location != null && message.hasOwnProperty("location")) {
                         if (!Array.isArray(message.location))
                             return "location: array expected";
                         for (var i = 0; i < message.location.length; ++i) {
-                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i]);
+                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i], long + 1);
                             if (error)
                                 return "location." + error;
                         }
@@ -216174,9 +225318,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo
                  */
-                SourceCodeInfo.fromObject = function fromObject(object) {
+                SourceCodeInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.SourceCodeInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.SourceCodeInfo();
                     if (object.location) {
                         if (!Array.isArray(object.location))
@@ -216185,7 +225333,7 @@
                         for (var i = 0; i < object.location.length; ++i) {
                             if (typeof object.location[i] !== "object")
                                 throw TypeError(".google.protobuf.SourceCodeInfo.location: object expected");
-                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i]);
+                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i], long + 1);
                         }
                     }
                     return message;
@@ -216267,7 +225415,7 @@
                         this.leadingDetachedComments = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -216381,9 +225529,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Location.decode = function decode(reader, length, error) {
+                    Location.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo.Location();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -216427,7 +225579,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -216458,9 +225610,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Location.verify = function verify(message) {
+                    Location.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.path != null && message.hasOwnProperty("path")) {
                             if (!Array.isArray(message.path))
                                 return "path: array expected";
@@ -216499,9 +225655,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.SourceCodeInfo.Location} Location
                      */
-                    Location.fromObject = function fromObject(object) {
+                    Location.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.SourceCodeInfo.Location)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.SourceCodeInfo.Location();
                         if (object.path) {
                             if (!Array.isArray(object.path))
@@ -216628,7 +225788,7 @@
                     this.annotation = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -216694,9 +225854,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GeneratedCodeInfo.decode = function decode(reader, length, error) {
+                GeneratedCodeInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -216706,11 +225870,11 @@
                         case 1: {
                                 if (!(message.annotation && message.annotation.length))
                                     message.annotation = [];
-                                message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32()));
+                                message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -216741,14 +225905,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GeneratedCodeInfo.verify = function verify(message) {
+                GeneratedCodeInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.annotation != null && message.hasOwnProperty("annotation")) {
                         if (!Array.isArray(message.annotation))
                             return "annotation: array expected";
                         for (var i = 0; i < message.annotation.length; ++i) {
-                            var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i]);
+                            var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i], long + 1);
                             if (error)
                                 return "annotation." + error;
                         }
@@ -216764,9 +225932,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo
                  */
-                GeneratedCodeInfo.fromObject = function fromObject(object) {
+                GeneratedCodeInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.GeneratedCodeInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.GeneratedCodeInfo();
                     if (object.annotation) {
                         if (!Array.isArray(object.annotation))
@@ -216775,7 +225947,7 @@
                         for (var i = 0; i < object.annotation.length; ++i) {
                             if (typeof object.annotation[i] !== "object")
                                 throw TypeError(".google.protobuf.GeneratedCodeInfo.annotation: object expected");
-                            message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i]);
+                            message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i], long + 1);
                         }
                     }
                     return message;
@@ -216855,7 +226027,7 @@
                         this.path = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -216964,9 +226136,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Annotation.decode = function decode(reader, length, error) {
+                    Annotation.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo.Annotation();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -217001,7 +226177,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -217032,9 +226208,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Annotation.verify = function verify(message) {
+                    Annotation.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.path != null && message.hasOwnProperty("path")) {
                             if (!Array.isArray(message.path))
                                 return "path: array expected";
@@ -217071,9 +226251,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation
                      */
-                    Annotation.fromObject = function fromObject(object) {
+                    Annotation.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.GeneratedCodeInfo.Annotation)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.GeneratedCodeInfo.Annotation();
                         if (object.path) {
                             if (!Array.isArray(object.path))
@@ -217233,7 +226417,7 @@
                 function Duration(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -217308,9 +226492,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Duration.decode = function decode(reader, length, error) {
+                Duration.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Duration();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -217326,7 +226514,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -217357,9 +226545,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Duration.verify = function verify(message) {
+                Duration.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.seconds != null && message.hasOwnProperty("seconds"))
                         if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high)))
                             return "seconds: integer|Long expected";
@@ -217377,9 +226569,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Duration} Duration
                  */
-                Duration.fromObject = function fromObject(object) {
+                Duration.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Duration)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Duration();
                     if (object.seconds != null)
                         if ($util.Long)
@@ -217476,7 +226672,7 @@
                 function Timestamp(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -217551,9 +226747,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Timestamp.decode = function decode(reader, length, error) {
+                Timestamp.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Timestamp();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -217569,7 +226769,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -217600,9 +226800,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Timestamp.verify = function verify(message) {
+                Timestamp.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.seconds != null && message.hasOwnProperty("seconds"))
                         if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high)))
                             return "seconds: integer|Long expected";
@@ -217620,9 +226824,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Timestamp} Timestamp
                  */
-                Timestamp.fromObject = function fromObject(object) {
+                Timestamp.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Timestamp)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Timestamp();
                     if (object.seconds != null)
                         if ($util.Long)
@@ -217719,7 +226927,7 @@
                 function Any(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -217794,9 +227002,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Any.decode = function decode(reader, length, error) {
+                Any.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Any();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -217812,7 +227024,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -217843,9 +227055,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Any.verify = function verify(message) {
+                Any.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type_url != null && message.hasOwnProperty("type_url"))
                         if (!$util.isString(message.type_url))
                             return "type_url: string expected";
@@ -217863,9 +227079,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Any} Any
                  */
-                Any.fromObject = function fromObject(object) {
+                Any.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Any)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Any();
                     if (object.type_url != null)
                         message.type_url = String(object.type_url);
@@ -217955,7 +227175,7 @@
                 function Empty(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -218010,9 +227230,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Empty.decode = function decode(reader, length, error) {
+                Empty.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Empty();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -218020,7 +227244,7 @@
                             break;
                         switch (tag >>> 3) {
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -218051,9 +227275,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Empty.verify = function verify(message) {
+                Empty.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     return null;
                 };
     
@@ -218065,9 +227293,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Empty} Empty
                  */
-                Empty.fromObject = function fromObject(object) {
+                Empty.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Empty)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     return new $root.google.protobuf.Empty();
                 };
     
@@ -218134,7 +227366,7 @@
                     this.paths = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -218200,9 +227432,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldMask.decode = function decode(reader, length, error) {
+                FieldMask.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldMask();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -218216,7 +227452,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -218247,9 +227483,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldMask.verify = function verify(message) {
+                FieldMask.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.paths != null && message.hasOwnProperty("paths")) {
                         if (!Array.isArray(message.paths))
                             return "paths: array expected";
@@ -218268,9 +227508,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldMask} FieldMask
                  */
-                FieldMask.fromObject = function fromObject(object) {
+                FieldMask.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldMask)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldMask();
                     if (object.paths) {
                         if (!Array.isArray(object.paths))
@@ -218354,7 +227598,7 @@
                 function DoubleValue(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -218419,9 +227663,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DoubleValue.decode = function decode(reader, length, error) {
+                DoubleValue.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DoubleValue();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -218433,7 +227681,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -218464,9 +227712,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DoubleValue.verify = function verify(message) {
+                DoubleValue.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.value != null && message.hasOwnProperty("value"))
                         if (typeof message.value !== "number")
                             return "value: number expected";
@@ -218481,9 +227733,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.DoubleValue} DoubleValue
                  */
-                DoubleValue.fromObject = function fromObject(object) {
+                DoubleValue.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.DoubleValue)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.DoubleValue();
                     if (object.value != null)
                         message.value = Number(object.value);
@@ -218559,7 +227815,7 @@
                 function FloatValue(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -218624,9 +227880,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FloatValue.decode = function decode(reader, length, error) {
+                FloatValue.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FloatValue();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -218638,7 +227898,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -218669,9 +227929,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FloatValue.verify = function verify(message) {
+                FloatValue.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.value != null && message.hasOwnProperty("value"))
                         if (typeof message.value !== "number")
                             return "value: number expected";
@@ -218686,9 +227950,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FloatValue} FloatValue
                  */
-                FloatValue.fromObject = function fromObject(object) {
+                FloatValue.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FloatValue)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FloatValue();
                     if (object.value != null)
                         message.value = Number(object.value);
@@ -218764,7 +228032,7 @@
                 function Int64Value(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -218829,9 +228097,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Int64Value.decode = function decode(reader, length, error) {
+                Int64Value.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Int64Value();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -218843,7 +228115,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -218874,9 +228146,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Int64Value.verify = function verify(message) {
+                Int64Value.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.value != null && message.hasOwnProperty("value"))
                         if (!$util.isInteger(message.value) && !(message.value && $util.isInteger(message.value.low) && $util.isInteger(message.value.high)))
                             return "value: integer|Long expected";
@@ -218891,9 +228167,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Int64Value} Int64Value
                  */
-                Int64Value.fromObject = function fromObject(object) {
+                Int64Value.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Int64Value)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Int64Value();
                     if (object.value != null)
                         if ($util.Long)
@@ -218983,7 +228263,7 @@
                 function UInt64Value(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -219048,9 +228328,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                UInt64Value.decode = function decode(reader, length, error) {
+                UInt64Value.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UInt64Value();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -219062,7 +228346,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -219093,9 +228377,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                UInt64Value.verify = function verify(message) {
+                UInt64Value.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.value != null && message.hasOwnProperty("value"))
                         if (!$util.isInteger(message.value) && !(message.value && $util.isInteger(message.value.low) && $util.isInteger(message.value.high)))
                             return "value: integer|Long expected";
@@ -219110,9 +228398,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.UInt64Value} UInt64Value
                  */
-                UInt64Value.fromObject = function fromObject(object) {
+                UInt64Value.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.UInt64Value)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.UInt64Value();
                     if (object.value != null)
                         if ($util.Long)
@@ -219202,7 +228494,7 @@
                 function Int32Value(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -219267,9 +228559,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Int32Value.decode = function decode(reader, length, error) {
+                Int32Value.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Int32Value();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -219281,7 +228577,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -219312,9 +228608,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Int32Value.verify = function verify(message) {
+                Int32Value.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.value != null && message.hasOwnProperty("value"))
                         if (!$util.isInteger(message.value))
                             return "value: integer expected";
@@ -219329,9 +228629,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Int32Value} Int32Value
                  */
-                Int32Value.fromObject = function fromObject(object) {
+                Int32Value.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Int32Value)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Int32Value();
                     if (object.value != null)
                         message.value = object.value | 0;
@@ -219407,7 +228711,7 @@
                 function UInt32Value(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -219472,9 +228776,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                UInt32Value.decode = function decode(reader, length, error) {
+                UInt32Value.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UInt32Value();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -219486,7 +228794,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -219517,9 +228825,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                UInt32Value.verify = function verify(message) {
+                UInt32Value.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.value != null && message.hasOwnProperty("value"))
                         if (!$util.isInteger(message.value))
                             return "value: integer expected";
@@ -219534,9 +228846,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.UInt32Value} UInt32Value
                  */
-                UInt32Value.fromObject = function fromObject(object) {
+                UInt32Value.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.UInt32Value)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.UInt32Value();
                     if (object.value != null)
                         message.value = object.value >>> 0;
@@ -219612,7 +228928,7 @@
                 function BoolValue(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -219677,9 +228993,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                BoolValue.decode = function decode(reader, length, error) {
+                BoolValue.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.BoolValue();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -219691,7 +229011,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -219722,9 +229042,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                BoolValue.verify = function verify(message) {
+                BoolValue.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.value != null && message.hasOwnProperty("value"))
                         if (typeof message.value !== "boolean")
                             return "value: boolean expected";
@@ -219739,9 +229063,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.BoolValue} BoolValue
                  */
-                BoolValue.fromObject = function fromObject(object) {
+                BoolValue.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.BoolValue)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.BoolValue();
                     if (object.value != null)
                         message.value = Boolean(object.value);
@@ -219817,7 +229145,7 @@
                 function StringValue(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -219882,9 +229210,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                StringValue.decode = function decode(reader, length, error) {
+                StringValue.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.StringValue();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -219896,7 +229228,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -219927,9 +229259,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                StringValue.verify = function verify(message) {
+                StringValue.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.value != null && message.hasOwnProperty("value"))
                         if (!$util.isString(message.value))
                             return "value: string expected";
@@ -219944,9 +229280,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.StringValue} StringValue
                  */
-                StringValue.fromObject = function fromObject(object) {
+                StringValue.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.StringValue)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.StringValue();
                     if (object.value != null)
                         message.value = String(object.value);
@@ -220022,7 +229362,7 @@
                 function BytesValue(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -220087,9 +229427,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                BytesValue.decode = function decode(reader, length, error) {
+                BytesValue.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.BytesValue();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -220101,7 +229445,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -220132,9 +229476,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                BytesValue.verify = function verify(message) {
+                BytesValue.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.value != null && message.hasOwnProperty("value"))
                         if (!(message.value && typeof message.value.length === "number" || $util.isString(message.value)))
                             return "value: buffer expected";
@@ -220149,9 +229497,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.BytesValue} BytesValue
                  */
-                BytesValue.fromObject = function fromObject(object) {
+                BytesValue.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.BytesValue)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.BytesValue();
                     if (object.value != null)
                         if (typeof object.value === "string")
@@ -220237,7 +229589,7 @@
                     this.fields = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -220305,9 +229657,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Struct.decode = function decode(reader, length, error) {
+                Struct.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Struct(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -220327,18 +229683,20 @@
                                         key = reader.string();
                                         break;
                                     case 2:
-                                        value = $root.google.protobuf.Value.decode(reader, reader.uint32());
+                                        value = $root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.fields, key);
                                 message.fields[key] = value;
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -220369,15 +229727,19 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Struct.verify = function verify(message) {
+                Struct.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.fields != null && message.hasOwnProperty("fields")) {
                         if (!$util.isObject(message.fields))
                             return "fields: object expected";
                         var key = Object.keys(message.fields);
                         for (var i = 0; i < key.length; ++i) {
-                            var error = $root.google.protobuf.Value.verify(message.fields[key[i]]);
+                            var error = $root.google.protobuf.Value.verify(message.fields[key[i]], long + 1);
                             if (error)
                                 return "fields." + error;
                         }
@@ -220393,18 +229755,24 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Struct} Struct
                  */
-                Struct.fromObject = function fromObject(object) {
+                Struct.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Struct)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Struct();
                     if (object.fields) {
                         if (typeof object.fields !== "object")
                             throw TypeError(".google.protobuf.Struct.fields: object expected");
                         message.fields = {};
                         for (var keys = Object.keys(object.fields), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.fields, keys[i]);
                             if (typeof object.fields[keys[i]] !== "object")
                                 throw TypeError(".google.protobuf.Struct.fields: object expected");
-                            message.fields[keys[i]] = $root.google.protobuf.Value.fromObject(object.fields[keys[i]]);
+                            message.fields[keys[i]] = $root.google.protobuf.Value.fromObject(object.fields[keys[i]], long + 1);
                         }
                     }
                     return message;
@@ -220428,8 +229796,11 @@
                     var keys2;
                     if (message.fields && (keys2 = Object.keys(message.fields)).length) {
                         object.fields = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.fields, keys2[j]);
                             object.fields[keys2[j]] = $root.google.protobuf.Value.toObject(message.fields[keys2[j]], options);
+                        }
                     }
                     return object;
                 };
@@ -220488,7 +229859,7 @@
                 function Value(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -220617,9 +229988,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Value.decode = function decode(reader, length, error) {
+                Value.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Value();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -220643,15 +230018,15 @@
                                 break;
                             }
                         case 5: {
-                                message.structValue = $root.google.protobuf.Struct.decode(reader, reader.uint32());
+                                message.structValue = $root.google.protobuf.Struct.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 6: {
-                                message.listValue = $root.google.protobuf.ListValue.decode(reader, reader.uint32());
+                                message.listValue = $root.google.protobuf.ListValue.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -220682,9 +230057,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Value.verify = function verify(message) {
+                Value.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.nullValue != null && message.hasOwnProperty("nullValue")) {
                         properties.kind = 1;
@@ -220721,7 +230100,7 @@
                             return "kind: multiple values";
                         properties.kind = 1;
                         {
-                            var error = $root.google.protobuf.Struct.verify(message.structValue);
+                            var error = $root.google.protobuf.Struct.verify(message.structValue, long + 1);
                             if (error)
                                 return "structValue." + error;
                         }
@@ -220731,7 +230110,7 @@
                             return "kind: multiple values";
                         properties.kind = 1;
                         {
-                            var error = $root.google.protobuf.ListValue.verify(message.listValue);
+                            var error = $root.google.protobuf.ListValue.verify(message.listValue, long + 1);
                             if (error)
                                 return "listValue." + error;
                         }
@@ -220747,9 +230126,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Value} Value
                  */
-                Value.fromObject = function fromObject(object) {
+                Value.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Value)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Value();
                     switch (object.nullValue) {
                     default:
@@ -220772,12 +230155,12 @@
                     if (object.structValue != null) {
                         if (typeof object.structValue !== "object")
                             throw TypeError(".google.protobuf.Value.structValue: object expected");
-                        message.structValue = $root.google.protobuf.Struct.fromObject(object.structValue);
+                        message.structValue = $root.google.protobuf.Struct.fromObject(object.structValue, long + 1);
                     }
                     if (object.listValue != null) {
                         if (typeof object.listValue !== "object")
                             throw TypeError(".google.protobuf.Value.listValue: object expected");
-                        message.listValue = $root.google.protobuf.ListValue.fromObject(object.listValue);
+                        message.listValue = $root.google.protobuf.ListValue.fromObject(object.listValue, long + 1);
                     }
                     return message;
                 };
@@ -220890,7 +230273,7 @@
                     this.values = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -220956,9 +230339,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListValue.decode = function decode(reader, length, error) {
+                ListValue.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ListValue();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -220968,11 +230355,11 @@
                         case 1: {
                                 if (!(message.values && message.values.length))
                                     message.values = [];
-                                message.values.push($root.google.protobuf.Value.decode(reader, reader.uint32()));
+                                message.values.push($root.google.protobuf.Value.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -221003,14 +230390,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListValue.verify = function verify(message) {
+                ListValue.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.values != null && message.hasOwnProperty("values")) {
                         if (!Array.isArray(message.values))
                             return "values: array expected";
                         for (var i = 0; i < message.values.length; ++i) {
-                            var error = $root.google.protobuf.Value.verify(message.values[i]);
+                            var error = $root.google.protobuf.Value.verify(message.values[i], long + 1);
                             if (error)
                                 return "values." + error;
                         }
@@ -221026,9 +230417,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ListValue} ListValue
                  */
-                ListValue.fromObject = function fromObject(object) {
+                ListValue.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ListValue)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ListValue();
                     if (object.values) {
                         if (!Array.isArray(object.values))
@@ -221037,7 +230432,7 @@
                         for (var i = 0; i < object.values.length; ++i) {
                             if (typeof object.values[i] !== "object")
                                 throw TypeError(".google.protobuf.ListValue.values: object expected");
-                            message.values[i] = $root.google.protobuf.Value.fromObject(object.values[i]);
+                            message.values[i] = $root.google.protobuf.Value.fromObject(object.values[i], long + 1);
                         }
                     }
                     return message;
@@ -221130,7 +230525,7 @@
                     this.details = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -221216,9 +230611,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Status.decode = function decode(reader, length, error) {
+                Status.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.rpc.Status();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -221236,11 +230635,11 @@
                         case 3: {
                                 if (!(message.details && message.details.length))
                                     message.details = [];
-                                message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32()));
+                                message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -221271,9 +230670,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Status.verify = function verify(message) {
+                Status.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.code != null && message.hasOwnProperty("code"))
                         if (!$util.isInteger(message.code))
                             return "code: integer expected";
@@ -221284,7 +230687,7 @@
                         if (!Array.isArray(message.details))
                             return "details: array expected";
                         for (var i = 0; i < message.details.length; ++i) {
-                            var error = $root.google.protobuf.Any.verify(message.details[i]);
+                            var error = $root.google.protobuf.Any.verify(message.details[i], long + 1);
                             if (error)
                                 return "details." + error;
                         }
@@ -221300,9 +230703,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.rpc.Status} Status
                  */
-                Status.fromObject = function fromObject(object) {
+                Status.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.rpc.Status)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.rpc.Status();
                     if (object.code != null)
                         message.code = object.code | 0;
@@ -221315,7 +230722,7 @@
                         for (var i = 0; i < object.details.length; ++i) {
                             if (typeof object.details[i] !== "object")
                                 throw TypeError(".google.rpc.Status.details: object expected");
-                            message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i]);
+                            message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i], long + 1);
                         }
                     }
                     return message;
@@ -221617,7 +231024,7 @@
                 function Operation(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -221736,9 +231143,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Operation.decode = function decode(reader, length, error) {
+                Operation.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.Operation();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -221750,7 +231161,7 @@
                                 break;
                             }
                         case 2: {
-                                message.metadata = $root.google.protobuf.Any.decode(reader, reader.uint32());
+                                message.metadata = $root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -221758,15 +231169,15 @@
                                 break;
                             }
                         case 4: {
-                                message.error = $root.google.rpc.Status.decode(reader, reader.uint32());
+                                message.error = $root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 5: {
-                                message.response = $root.google.protobuf.Any.decode(reader, reader.uint32());
+                                message.response = $root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -221797,15 +231208,19 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Operation.verify = function verify(message) {
+                Operation.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.metadata != null && message.hasOwnProperty("metadata")) {
-                        var error = $root.google.protobuf.Any.verify(message.metadata);
+                        var error = $root.google.protobuf.Any.verify(message.metadata, long + 1);
                         if (error)
                             return "metadata." + error;
                     }
@@ -221815,7 +231230,7 @@
                     if (message.error != null && message.hasOwnProperty("error")) {
                         properties.result = 1;
                         {
-                            var error = $root.google.rpc.Status.verify(message.error);
+                            var error = $root.google.rpc.Status.verify(message.error, long + 1);
                             if (error)
                                 return "error." + error;
                         }
@@ -221825,7 +231240,7 @@
                             return "result: multiple values";
                         properties.result = 1;
                         {
-                            var error = $root.google.protobuf.Any.verify(message.response);
+                            var error = $root.google.protobuf.Any.verify(message.response, long + 1);
                             if (error)
                                 return "response." + error;
                         }
@@ -221841,28 +231256,32 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.Operation} Operation
                  */
-                Operation.fromObject = function fromObject(object) {
+                Operation.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.Operation)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.Operation();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.metadata != null) {
                         if (typeof object.metadata !== "object")
                             throw TypeError(".google.longrunning.Operation.metadata: object expected");
-                        message.metadata = $root.google.protobuf.Any.fromObject(object.metadata);
+                        message.metadata = $root.google.protobuf.Any.fromObject(object.metadata, long + 1);
                     }
                     if (object.done != null)
                         message.done = Boolean(object.done);
                     if (object.error != null) {
                         if (typeof object.error !== "object")
                             throw TypeError(".google.longrunning.Operation.error: object expected");
-                        message.error = $root.google.rpc.Status.fromObject(object.error);
+                        message.error = $root.google.rpc.Status.fromObject(object.error, long + 1);
                     }
                     if (object.response != null) {
                         if (typeof object.response !== "object")
                             throw TypeError(".google.longrunning.Operation.response: object expected");
-                        message.response = $root.google.protobuf.Any.fromObject(object.response);
+                        message.response = $root.google.protobuf.Any.fromObject(object.response, long + 1);
                     }
                     return message;
                 };
@@ -221953,7 +231372,7 @@
                 function GetOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -222018,9 +231437,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GetOperationRequest.decode = function decode(reader, length, error) {
+                GetOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.GetOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -222032,7 +231455,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -222063,9 +231486,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GetOperationRequest.verify = function verify(message) {
+                GetOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -222080,9 +231507,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.GetOperationRequest} GetOperationRequest
                  */
-                GetOperationRequest.fromObject = function fromObject(object) {
+                GetOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.GetOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.GetOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -222161,7 +231592,7 @@
                 function ListOperationsRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -222256,9 +231687,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListOperationsRequest.decode = function decode(reader, length, error) {
+                ListOperationsRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.ListOperationsRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -222282,7 +231717,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -222313,9 +231748,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListOperationsRequest.verify = function verify(message) {
+                ListOperationsRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -222339,9 +231778,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.ListOperationsRequest} ListOperationsRequest
                  */
-                ListOperationsRequest.fromObject = function fromObject(object) {
+                ListOperationsRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.ListOperationsRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.ListOperationsRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -222435,7 +231878,7 @@
                     this.operations = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -222511,9 +231954,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListOperationsResponse.decode = function decode(reader, length, error) {
+                ListOperationsResponse.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.ListOperationsResponse();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -222523,7 +231970,7 @@
                         case 1: {
                                 if (!(message.operations && message.operations.length))
                                     message.operations = [];
-                                message.operations.push($root.google.longrunning.Operation.decode(reader, reader.uint32()));
+                                message.operations.push($root.google.longrunning.Operation.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
@@ -222531,7 +231978,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -222562,14 +232009,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListOperationsResponse.verify = function verify(message) {
+                ListOperationsResponse.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.operations != null && message.hasOwnProperty("operations")) {
                         if (!Array.isArray(message.operations))
                             return "operations: array expected";
                         for (var i = 0; i < message.operations.length; ++i) {
-                            var error = $root.google.longrunning.Operation.verify(message.operations[i]);
+                            var error = $root.google.longrunning.Operation.verify(message.operations[i], long + 1);
                             if (error)
                                 return "operations." + error;
                         }
@@ -222588,9 +232039,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.ListOperationsResponse} ListOperationsResponse
                  */
-                ListOperationsResponse.fromObject = function fromObject(object) {
+                ListOperationsResponse.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.ListOperationsResponse)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.ListOperationsResponse();
                     if (object.operations) {
                         if (!Array.isArray(object.operations))
@@ -222599,7 +232054,7 @@
                         for (var i = 0; i < object.operations.length; ++i) {
                             if (typeof object.operations[i] !== "object")
                                 throw TypeError(".google.longrunning.ListOperationsResponse.operations: object expected");
-                            message.operations[i] = $root.google.longrunning.Operation.fromObject(object.operations[i]);
+                            message.operations[i] = $root.google.longrunning.Operation.fromObject(object.operations[i], long + 1);
                         }
                     }
                     if (object.nextPageToken != null)
@@ -222683,7 +232138,7 @@
                 function CancelOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -222748,9 +232203,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CancelOperationRequest.decode = function decode(reader, length, error) {
+                CancelOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.CancelOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -222762,7 +232221,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -222793,9 +232252,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CancelOperationRequest.verify = function verify(message) {
+                CancelOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -222810,9 +232273,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.CancelOperationRequest} CancelOperationRequest
                  */
-                CancelOperationRequest.fromObject = function fromObject(object) {
+                CancelOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.CancelOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.CancelOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -222888,7 +232355,7 @@
                 function DeleteOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -222953,9 +232420,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DeleteOperationRequest.decode = function decode(reader, length, error) {
+                DeleteOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.DeleteOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -222967,7 +232438,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -222998,9 +232469,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DeleteOperationRequest.verify = function verify(message) {
+                DeleteOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -223015,9 +232490,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.DeleteOperationRequest} DeleteOperationRequest
                  */
-                DeleteOperationRequest.fromObject = function fromObject(object) {
+                DeleteOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.DeleteOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.DeleteOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -223094,7 +232573,7 @@
                 function WaitOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -223169,9 +232648,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                WaitOperationRequest.decode = function decode(reader, length, error) {
+                WaitOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.WaitOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -223183,11 +232666,11 @@
                                 break;
                             }
                         case 2: {
-                                message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -223218,14 +232701,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                WaitOperationRequest.verify = function verify(message) {
+                WaitOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.timeout != null && message.hasOwnProperty("timeout")) {
-                        var error = $root.google.protobuf.Duration.verify(message.timeout);
+                        var error = $root.google.protobuf.Duration.verify(message.timeout, long + 1);
                         if (error)
                             return "timeout." + error;
                     }
@@ -223240,16 +232727,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.WaitOperationRequest} WaitOperationRequest
                  */
-                WaitOperationRequest.fromObject = function fromObject(object) {
+                WaitOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.WaitOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.WaitOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.timeout != null) {
                         if (typeof object.timeout !== "object")
                             throw TypeError(".google.longrunning.WaitOperationRequest.timeout: object expected");
-                        message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout);
+                        message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout, long + 1);
                     }
                     return message;
                 };
@@ -223328,7 +232819,7 @@
                 function OperationInfo(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -223403,9 +232894,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OperationInfo.decode = function decode(reader, length, error) {
+                OperationInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.OperationInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -223421,7 +232916,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -223452,9 +232947,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OperationInfo.verify = function verify(message) {
+                OperationInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.responseType != null && message.hasOwnProperty("responseType"))
                         if (!$util.isString(message.responseType))
                             return "responseType: string expected";
@@ -223472,9 +232971,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.OperationInfo} OperationInfo
                  */
-                OperationInfo.fromObject = function fromObject(object) {
+                OperationInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.OperationInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.OperationInfo();
                     if (object.responseType != null)
                         message.responseType = String(object.responseType);
@@ -223570,7 +233073,7 @@
                 function Date(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -223655,9 +233158,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Date.decode = function decode(reader, length, error) {
+                Date.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.type.Date();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -223677,7 +233184,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -223708,9 +233215,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Date.verify = function verify(message) {
+                Date.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.year != null && message.hasOwnProperty("year"))
                         if (!$util.isInteger(message.year))
                             return "year: integer expected";
@@ -223731,9 +233242,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.type.Date} Date
                  */
-                Date.fromObject = function fromObject(object) {
+                Date.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.type.Date)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.type.Date();
                     if (object.year != null)
                         message.year = object.year | 0;
diff --git a/packages/google-cloud-run/README.md b/packages/google-cloud-run/README.md
index af199e3b6603..f763f40717c1 100644
--- a/packages/google-cloud-run/README.md
+++ b/packages/google-cloud-run/README.md
@@ -89,7 +89,6 @@ Samples are in the [`samples/`][homepage_samples] directory. Each sample's `READ
 | set iam policy | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-run/samples/generated/v2/services.set_iam_policy.js) |
 | test iam permissions | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-run/samples/generated/v2/services.test_iam_permissions.js) |
 | update service | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-run/samples/generated/v2/services.update_service.js) |
-| cloud | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-run/samples/generated/v2/snippet_metadata_google.cloud.run.v2.json) |
 | get task | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-run/samples/generated/v2/tasks.get_task.js) |
 | list tasks | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-run/samples/generated/v2/tasks.list_tasks.js) |
 | create worker pool | [source code](https://github.com/googleapis/google-cloud-node/blob/main/packages/google-cloud-run/samples/generated/v2/worker_pools.create_worker_pool.js) |
diff --git a/packages/google-cloud-run/protos/protos.js b/packages/google-cloud-run/protos/protos.js
index 7a69c1951e71..1d6497357696 100644
--- a/packages/google-cloud-run/protos/protos.js
+++ b/packages/google-cloud-run/protos/protos.js
@@ -165,7 +165,7 @@
                             this.tags = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -356,9 +356,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SubmitBuildRequest.decode = function decode(reader, length, error) {
+                        SubmitBuildRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.SubmitBuildRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -370,7 +374,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.storageSource = $root.google.cloud.run.v2.StorageSource.decode(reader, reader.uint32());
+                                        message.storageSource = $root.google.cloud.run.v2.StorageSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -378,11 +382,11 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.buildpackBuild = $root.google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild.decode(reader, reader.uint32());
+                                        message.buildpackBuild = $root.google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
-                                        message.dockerBuild = $root.google.cloud.run.v2.SubmitBuildRequest.DockerBuild.decode(reader, reader.uint32());
+                                        message.dockerBuild = $root.google.cloud.run.v2.SubmitBuildRequest.DockerBuild.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
@@ -412,7 +416,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -443,9 +447,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SubmitBuildRequest.verify = function verify(message) {
+                        SubmitBuildRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
@@ -453,7 +461,7 @@
                             if (message.storageSource != null && message.hasOwnProperty("storageSource")) {
                                 properties.source = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.StorageSource.verify(message.storageSource);
+                                    var error = $root.google.cloud.run.v2.StorageSource.verify(message.storageSource, long + 1);
                                     if (error)
                                         return "storageSource." + error;
                                 }
@@ -464,7 +472,7 @@
                             if (message.buildpackBuild != null && message.hasOwnProperty("buildpackBuild")) {
                                 properties.buildType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild.verify(message.buildpackBuild);
+                                    var error = $root.google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild.verify(message.buildpackBuild, long + 1);
                                     if (error)
                                         return "buildpackBuild." + error;
                                 }
@@ -474,7 +482,7 @@
                                     return "buildType: multiple values";
                                 properties.buildType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.SubmitBuildRequest.DockerBuild.verify(message.dockerBuild);
+                                    var error = $root.google.cloud.run.v2.SubmitBuildRequest.DockerBuild.verify(message.dockerBuild, long + 1);
                                     if (error)
                                         return "dockerBuild." + error;
                                 }
@@ -523,28 +531,32 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.SubmitBuildRequest} SubmitBuildRequest
                          */
-                        SubmitBuildRequest.fromObject = function fromObject(object) {
+                        SubmitBuildRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.SubmitBuildRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.SubmitBuildRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.storageSource != null) {
                                 if (typeof object.storageSource !== "object")
                                     throw TypeError(".google.cloud.run.v2.SubmitBuildRequest.storageSource: object expected");
-                                message.storageSource = $root.google.cloud.run.v2.StorageSource.fromObject(object.storageSource);
+                                message.storageSource = $root.google.cloud.run.v2.StorageSource.fromObject(object.storageSource, long + 1);
                             }
                             if (object.imageUri != null)
                                 message.imageUri = String(object.imageUri);
                             if (object.buildpackBuild != null) {
                                 if (typeof object.buildpackBuild !== "object")
                                     throw TypeError(".google.cloud.run.v2.SubmitBuildRequest.buildpackBuild: object expected");
-                                message.buildpackBuild = $root.google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild.fromObject(object.buildpackBuild);
+                                message.buildpackBuild = $root.google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild.fromObject(object.buildpackBuild, long + 1);
                             }
                             if (object.dockerBuild != null) {
                                 if (typeof object.dockerBuild !== "object")
                                     throw TypeError(".google.cloud.run.v2.SubmitBuildRequest.dockerBuild: object expected");
-                                message.dockerBuild = $root.google.cloud.run.v2.SubmitBuildRequest.DockerBuild.fromObject(object.dockerBuild);
+                                message.dockerBuild = $root.google.cloud.run.v2.SubmitBuildRequest.DockerBuild.fromObject(object.dockerBuild, long + 1);
                             }
                             if (object.serviceAccount != null)
                                 message.serviceAccount = String(object.serviceAccount);
@@ -710,7 +722,7 @@
                             function DockerBuild(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -765,9 +777,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            DockerBuild.decode = function decode(reader, length, error) {
+                            DockerBuild.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.SubmitBuildRequest.DockerBuild();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -775,7 +791,7 @@
                                         break;
                                     switch (tag >>> 3) {
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -806,9 +822,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            DockerBuild.verify = function verify(message) {
+                            DockerBuild.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 return null;
                             };
     
@@ -820,9 +840,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.run.v2.SubmitBuildRequest.DockerBuild} DockerBuild
                              */
-                            DockerBuild.fromObject = function fromObject(object) {
+                            DockerBuild.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.run.v2.SubmitBuildRequest.DockerBuild)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 return new $root.google.cloud.run.v2.SubmitBuildRequest.DockerBuild();
                             };
     
@@ -895,7 +919,7 @@
                                 this.environmentVariables = {};
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -1021,9 +1045,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            BuildpacksBuild.decode = function decode(reader, length, error) {
+                            BuildpacksBuild.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild(), key, value;
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -1062,10 +1090,12 @@
                                                     value = reader.string();
                                                     break;
                                                 default:
-                                                    reader.skipType(tag2 & 7);
+                                                    reader.skipType(tag2 & 7, long);
                                                     break;
                                                 }
                                             }
+                                            if (key === "__proto__")
+                                                $util.makeProp(message.environmentVariables, key);
                                             message.environmentVariables[key] = value;
                                             break;
                                         }
@@ -1078,7 +1108,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -1109,9 +1139,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            BuildpacksBuild.verify = function verify(message) {
+                            BuildpacksBuild.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.runtime != null && message.hasOwnProperty("runtime"))
                                     if (!$util.isString(message.runtime))
                                         return "runtime: string expected";
@@ -1149,9 +1183,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild} BuildpacksBuild
                              */
-                            BuildpacksBuild.fromObject = function fromObject(object) {
+                            BuildpacksBuild.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild();
                                 if (object.runtime != null)
                                     message.runtime = String(object.runtime);
@@ -1165,8 +1203,11 @@
                                     if (typeof object.environmentVariables !== "object")
                                         throw TypeError(".google.cloud.run.v2.SubmitBuildRequest.BuildpacksBuild.environmentVariables: object expected");
                                     message.environmentVariables = {};
-                                    for (var keys = Object.keys(object.environmentVariables), i = 0; i < keys.length; ++i)
+                                    for (var keys = Object.keys(object.environmentVariables), i = 0; i < keys.length; ++i) {
+                                        if (keys[i] === "__proto__")
+                                            $util.makeProp(message.environmentVariables, keys[i]);
                                         message.environmentVariables[keys[i]] = String(object.environmentVariables[keys[i]]);
+                                    }
                                 }
                                 if (object.enableAutomaticUpdates != null)
                                     message.enableAutomaticUpdates = Boolean(object.enableAutomaticUpdates);
@@ -1209,8 +1250,11 @@
                                 var keys2;
                                 if (message.environmentVariables && (keys2 = Object.keys(message.environmentVariables)).length) {
                                     object.environmentVariables = {};
-                                    for (var j = 0; j < keys2.length; ++j)
+                                    for (var j = 0; j < keys2.length; ++j) {
+                                        if (keys2[j] === "__proto__")
+                                            $util.makeProp(object.environmentVariables, keys2[j]);
                                         object.environmentVariables[keys2[j]] = message.environmentVariables[keys2[j]];
+                                    }
                                 }
                                 if (message.enableAutomaticUpdates != null && message.hasOwnProperty("enableAutomaticUpdates"))
                                     object.enableAutomaticUpdates = message.enableAutomaticUpdates;
@@ -1273,7 +1317,7 @@
                         function SubmitBuildResponse(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1358,9 +1402,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SubmitBuildResponse.decode = function decode(reader, length, error) {
+                        SubmitBuildResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.SubmitBuildResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1368,7 +1416,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.buildOperation = $root.google.longrunning.Operation.decode(reader, reader.uint32());
+                                        message.buildOperation = $root.google.longrunning.Operation.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
@@ -1380,7 +1428,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -1411,11 +1459,15 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SubmitBuildResponse.verify = function verify(message) {
+                        SubmitBuildResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.buildOperation != null && message.hasOwnProperty("buildOperation")) {
-                                var error = $root.google.longrunning.Operation.verify(message.buildOperation);
+                                var error = $root.google.longrunning.Operation.verify(message.buildOperation, long + 1);
                                 if (error)
                                     return "buildOperation." + error;
                             }
@@ -1436,14 +1488,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.SubmitBuildResponse} SubmitBuildResponse
                          */
-                        SubmitBuildResponse.fromObject = function fromObject(object) {
+                        SubmitBuildResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.SubmitBuildResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.SubmitBuildResponse();
                             if (object.buildOperation != null) {
                                 if (typeof object.buildOperation !== "object")
                                     throw TypeError(".google.cloud.run.v2.SubmitBuildResponse.buildOperation: object expected");
-                                message.buildOperation = $root.google.longrunning.Operation.fromObject(object.buildOperation);
+                                message.buildOperation = $root.google.longrunning.Operation.fromObject(object.buildOperation, long + 1);
                             }
                             if (object.baseImageUri != null)
                                 message.baseImageUri = String(object.baseImageUri);
@@ -1530,7 +1586,7 @@
                         function StorageSource(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1615,9 +1671,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        StorageSource.decode = function decode(reader, length, error) {
+                        StorageSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.StorageSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1637,7 +1697,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -1668,9 +1728,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        StorageSource.verify = function verify(message) {
+                        StorageSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.bucket != null && message.hasOwnProperty("bucket"))
                                 if (!$util.isString(message.bucket))
                                     return "bucket: string expected";
@@ -1691,9 +1755,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.StorageSource} StorageSource
                          */
-                        StorageSource.fromObject = function fromObject(object) {
+                        StorageSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.StorageSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.StorageSource();
                             if (object.bucket != null)
                                 message.bucket = String(object.bucket);
@@ -1801,7 +1869,7 @@
                         function Condition(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -1950,9 +2018,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Condition.decode = function decode(reader, length, error) {
+                        Condition.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Condition();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -1972,7 +2044,7 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.lastTransitionTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.lastTransitionTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -1992,7 +2064,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2023,9 +2095,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Condition.verify = function verify(message) {
+                        Condition.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.type != null && message.hasOwnProperty("type"))
                                 if (!$util.isString(message.type))
@@ -2045,7 +2121,7 @@
                                 if (!$util.isString(message.message))
                                     return "message: string expected";
                             if (message.lastTransitionTime != null && message.hasOwnProperty("lastTransitionTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.lastTransitionTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.lastTransitionTime, long + 1);
                                 if (error)
                                     return "lastTransitionTime." + error;
                             }
@@ -2134,9 +2210,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.Condition} Condition
                          */
-                        Condition.fromObject = function fromObject(object) {
+                        Condition.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.Condition)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.Condition();
                             if (object.type != null)
                                 message.type = String(object.type);
@@ -2173,7 +2253,7 @@
                             if (object.lastTransitionTime != null) {
                                 if (typeof object.lastTransitionTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Condition.lastTransitionTime: object expected");
-                                message.lastTransitionTime = $root.google.protobuf.Timestamp.fromObject(object.lastTransitionTime);
+                                message.lastTransitionTime = $root.google.protobuf.Timestamp.fromObject(object.lastTransitionTime, long + 1);
                             }
                             switch (object.severity) {
                             default:
@@ -2608,7 +2688,7 @@
                         function ContainerStatus(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -2683,9 +2763,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ContainerStatus.decode = function decode(reader, length, error) {
+                        ContainerStatus.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ContainerStatus();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -2701,7 +2785,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -2732,9 +2816,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ContainerStatus.verify = function verify(message) {
+                        ContainerStatus.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -2752,9 +2840,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ContainerStatus} ContainerStatus
                          */
-                        ContainerStatus.fromObject = function fromObject(object) {
+                        ContainerStatus.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ContainerStatus)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ContainerStatus();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -3003,7 +3095,7 @@
                         function GetExecutionRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3068,9 +3160,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetExecutionRequest.decode = function decode(reader, length, error) {
+                        GetExecutionRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.GetExecutionRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3082,7 +3178,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3113,9 +3209,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetExecutionRequest.verify = function verify(message) {
+                        GetExecutionRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -3130,9 +3230,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.GetExecutionRequest} GetExecutionRequest
                          */
-                        GetExecutionRequest.fromObject = function fromObject(object) {
+                        GetExecutionRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.GetExecutionRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.GetExecutionRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -3211,7 +3315,7 @@
                         function ListExecutionsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3306,9 +3410,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListExecutionsRequest.decode = function decode(reader, length, error) {
+                        ListExecutionsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListExecutionsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3332,7 +3440,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3363,9 +3471,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListExecutionsRequest.verify = function verify(message) {
+                        ListExecutionsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -3389,9 +3501,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListExecutionsRequest} ListExecutionsRequest
                          */
-                        ListExecutionsRequest.fromObject = function fromObject(object) {
+                        ListExecutionsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListExecutionsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListExecutionsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -3485,7 +3601,7 @@
                             this.executions = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3561,9 +3677,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListExecutionsResponse.decode = function decode(reader, length, error) {
+                        ListExecutionsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListExecutionsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3573,7 +3693,7 @@
                                 case 1: {
                                         if (!(message.executions && message.executions.length))
                                             message.executions = [];
-                                        message.executions.push($root.google.cloud.run.v2.Execution.decode(reader, reader.uint32()));
+                                        message.executions.push($root.google.cloud.run.v2.Execution.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -3581,7 +3701,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3612,14 +3732,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListExecutionsResponse.verify = function verify(message) {
+                        ListExecutionsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.executions != null && message.hasOwnProperty("executions")) {
                                 if (!Array.isArray(message.executions))
                                     return "executions: array expected";
                                 for (var i = 0; i < message.executions.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Execution.verify(message.executions[i]);
+                                    var error = $root.google.cloud.run.v2.Execution.verify(message.executions[i], long + 1);
                                     if (error)
                                         return "executions." + error;
                                 }
@@ -3638,9 +3762,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListExecutionsResponse} ListExecutionsResponse
                          */
-                        ListExecutionsResponse.fromObject = function fromObject(object) {
+                        ListExecutionsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListExecutionsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListExecutionsResponse();
                             if (object.executions) {
                                 if (!Array.isArray(object.executions))
@@ -3649,7 +3777,7 @@
                                 for (var i = 0; i < object.executions.length; ++i) {
                                     if (typeof object.executions[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.ListExecutionsResponse.executions: object expected");
-                                    message.executions[i] = $root.google.cloud.run.v2.Execution.fromObject(object.executions[i]);
+                                    message.executions[i] = $root.google.cloud.run.v2.Execution.fromObject(object.executions[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -3735,7 +3863,7 @@
                         function DeleteExecutionRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -3820,9 +3948,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteExecutionRequest.decode = function decode(reader, length, error) {
+                        DeleteExecutionRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.DeleteExecutionRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -3842,7 +3974,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -3873,9 +4005,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteExecutionRequest.verify = function verify(message) {
+                        DeleteExecutionRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -3896,9 +4032,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.DeleteExecutionRequest} DeleteExecutionRequest
                          */
-                        DeleteExecutionRequest.fromObject = function fromObject(object) {
+                        DeleteExecutionRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.DeleteExecutionRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.DeleteExecutionRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -3987,7 +4127,7 @@
                         function CancelExecutionRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4072,9 +4212,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CancelExecutionRequest.decode = function decode(reader, length, error) {
+                        CancelExecutionRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.CancelExecutionRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -4094,7 +4238,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -4125,9 +4269,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CancelExecutionRequest.verify = function verify(message) {
+                        CancelExecutionRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -4148,9 +4296,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.CancelExecutionRequest} CancelExecutionRequest
                          */
-                        CancelExecutionRequest.fromObject = function fromObject(object) {
+                        CancelExecutionRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.CancelExecutionRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.CancelExecutionRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -4267,7 +4419,7 @@
                             this.conditions = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -4605,9 +4757,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Execution.decode = function decode(reader, length, error) {
+                        Execution.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Execution(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -4646,10 +4802,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -4669,35 +4827,37 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.annotations, key);
                                         message.annotations[key] = value;
                                         break;
                                     }
                                 case 6: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 22: {
-                                        message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.completionTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.completionTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 11: {
@@ -4717,7 +4877,7 @@
                                         break;
                                     }
                                 case 15: {
-                                        message.template = $root.google.cloud.run.v2.TaskTemplate.decode(reader, reader.uint32());
+                                        message.template = $root.google.cloud.run.v2.TaskTemplate.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 16: {
@@ -4727,7 +4887,7 @@
                                 case 17: {
                                         if (!(message.conditions && message.conditions.length))
                                             message.conditions = [];
-                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32()));
+                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 18: {
@@ -4767,7 +4927,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -4798,9 +4958,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Execution.verify = function verify(message) {
+                        Execution.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -4830,32 +4994,32 @@
                                         return "annotations: string{k:string} expected";
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                 if (error)
                                     return "startTime." + error;
                             }
                             if (message.completionTime != null && message.hasOwnProperty("completionTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.completionTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.completionTime, long + 1);
                                 if (error)
                                     return "completionTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                 if (error)
                                     return "expireTime." + error;
                             }
@@ -4883,7 +5047,7 @@
                                 if (!$util.isInteger(message.taskCount))
                                     return "taskCount: integer expected";
                             if (message.template != null && message.hasOwnProperty("template")) {
-                                var error = $root.google.cloud.run.v2.TaskTemplate.verify(message.template);
+                                var error = $root.google.cloud.run.v2.TaskTemplate.verify(message.template, long + 1);
                                 if (error)
                                     return "template." + error;
                             }
@@ -4894,7 +5058,7 @@
                                 if (!Array.isArray(message.conditions))
                                     return "conditions: array expected";
                                 for (var i = 0; i < message.conditions.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i]);
+                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i], long + 1);
                                     if (error)
                                         return "conditions." + error;
                                 }
@@ -4937,9 +5101,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.Execution} Execution
                          */
-                        Execution.fromObject = function fromObject(object) {
+                        Execution.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.Execution)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.Execution();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -4960,45 +5128,51 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.run.v2.Execution.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.annotations) {
                                 if (typeof object.annotations !== "object")
                                     throw TypeError(".google.cloud.run.v2.Execution.annotations: object expected");
                                 message.annotations = {};
-                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.annotations, keys[i]);
                                     message.annotations[keys[i]] = String(object.annotations[keys[i]]);
+                                }
                             }
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Execution.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.startTime != null) {
                                 if (typeof object.startTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Execution.startTime: object expected");
-                                message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                             }
                             if (object.completionTime != null) {
                                 if (typeof object.completionTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Execution.completionTime: object expected");
-                                message.completionTime = $root.google.protobuf.Timestamp.fromObject(object.completionTime);
+                                message.completionTime = $root.google.protobuf.Timestamp.fromObject(object.completionTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Execution.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Execution.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Execution.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             switch (object.launchStage) {
                             default:
@@ -5049,7 +5223,7 @@
                             if (object.template != null) {
                                 if (typeof object.template !== "object")
                                     throw TypeError(".google.cloud.run.v2.Execution.template: object expected");
-                                message.template = $root.google.cloud.run.v2.TaskTemplate.fromObject(object.template);
+                                message.template = $root.google.cloud.run.v2.TaskTemplate.fromObject(object.template, long + 1);
                             }
                             if (object.reconciling != null)
                                 message.reconciling = Boolean(object.reconciling);
@@ -5060,7 +5234,7 @@
                                 for (var i = 0; i < object.conditions.length; ++i) {
                                     if (typeof object.conditions[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Execution.conditions: object expected");
-                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i]);
+                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i], long + 1);
                                 }
                             }
                             if (object.observedGeneration != null)
@@ -5157,13 +5331,19 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.annotations && (keys2 = Object.keys(message.annotations)).length) {
                                 object.annotations = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.annotations, keys2[j]);
                                     object.annotations[keys2[j]] = message.annotations[keys2[j]];
+                                }
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime"))
                                 object.createTime = $root.google.protobuf.Timestamp.toObject(message.createTime, options);
@@ -5280,7 +5460,7 @@
                             this.volumes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -5457,9 +5637,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TaskTemplate.decode = function decode(reader, length, error) {
+                        TaskTemplate.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.TaskTemplate();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -5469,13 +5653,13 @@
                                 case 1: {
                                         if (!(message.containers && message.containers.length))
                                             message.containers = [];
-                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32()));
+                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
                                         if (!(message.volumes && message.volumes.length))
                                             message.volumes = [];
-                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32()));
+                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 3: {
@@ -5483,7 +5667,7 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -5499,11 +5683,11 @@
                                         break;
                                     }
                                 case 8: {
-                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32());
+                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 11: {
-                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32());
+                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 12: {
@@ -5511,7 +5695,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -5542,15 +5726,19 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TaskTemplate.verify = function verify(message) {
+                        TaskTemplate.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.containers != null && message.hasOwnProperty("containers")) {
                                 if (!Array.isArray(message.containers))
                                     return "containers: array expected";
                                 for (var i = 0; i < message.containers.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i]);
+                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i], long + 1);
                                     if (error)
                                         return "containers." + error;
                                 }
@@ -5559,7 +5747,7 @@
                                 if (!Array.isArray(message.volumes))
                                     return "volumes: array expected";
                                 for (var i = 0; i < message.volumes.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i]);
+                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i], long + 1);
                                     if (error)
                                         return "volumes." + error;
                                 }
@@ -5570,7 +5758,7 @@
                                     return "maxRetries: integer expected";
                             }
                             if (message.timeout != null && message.hasOwnProperty("timeout")) {
-                                var error = $root.google.protobuf.Duration.verify(message.timeout);
+                                var error = $root.google.protobuf.Duration.verify(message.timeout, long + 1);
                                 if (error)
                                     return "timeout." + error;
                             }
@@ -5590,12 +5778,12 @@
                                 if (!$util.isString(message.encryptionKey))
                                     return "encryptionKey: string expected";
                             if (message.vpcAccess != null && message.hasOwnProperty("vpcAccess")) {
-                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess);
+                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess, long + 1);
                                 if (error)
                                     return "vpcAccess." + error;
                             }
                             if (message.nodeSelector != null && message.hasOwnProperty("nodeSelector")) {
-                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector);
+                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector, long + 1);
                                 if (error)
                                     return "nodeSelector." + error;
                             }
@@ -5615,9 +5803,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.TaskTemplate} TaskTemplate
                          */
-                        TaskTemplate.fromObject = function fromObject(object) {
+                        TaskTemplate.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.TaskTemplate)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.TaskTemplate();
                             if (object.containers) {
                                 if (!Array.isArray(object.containers))
@@ -5626,7 +5818,7 @@
                                 for (var i = 0; i < object.containers.length; ++i) {
                                     if (typeof object.containers[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.TaskTemplate.containers: object expected");
-                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i]);
+                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i], long + 1);
                                 }
                             }
                             if (object.volumes) {
@@ -5636,7 +5828,7 @@
                                 for (var i = 0; i < object.volumes.length; ++i) {
                                     if (typeof object.volumes[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.TaskTemplate.volumes: object expected");
-                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i]);
+                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i], long + 1);
                                 }
                             }
                             if (object.maxRetries != null)
@@ -5644,7 +5836,7 @@
                             if (object.timeout != null) {
                                 if (typeof object.timeout !== "object")
                                     throw TypeError(".google.cloud.run.v2.TaskTemplate.timeout: object expected");
-                                message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout);
+                                message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout, long + 1);
                             }
                             if (object.serviceAccount != null)
                                 message.serviceAccount = String(object.serviceAccount);
@@ -5673,12 +5865,12 @@
                             if (object.vpcAccess != null) {
                                 if (typeof object.vpcAccess !== "object")
                                     throw TypeError(".google.cloud.run.v2.TaskTemplate.vpcAccess: object expected");
-                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess);
+                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess, long + 1);
                             }
                             if (object.nodeSelector != null) {
                                 if (typeof object.nodeSelector !== "object")
                                     throw TypeError(".google.cloud.run.v2.TaskTemplate.nodeSelector: object expected");
-                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector);
+                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector, long + 1);
                             }
                             if (object.gpuZonalRedundancyDisabled != null)
                                 message.gpuZonalRedundancyDisabled = Boolean(object.gpuZonalRedundancyDisabled);
@@ -5815,7 +6007,7 @@
                             this.dependsOn = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -6036,9 +6228,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Container.decode = function decode(reader, length, error) {
+                        Container.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Container();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -6054,7 +6250,7 @@
                                         break;
                                     }
                                 case 17: {
-                                        message.sourceCode = $root.google.cloud.run.v2.SourceCode.decode(reader, reader.uint32());
+                                        message.sourceCode = $root.google.cloud.run.v2.SourceCode.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -6072,23 +6268,23 @@
                                 case 5: {
                                         if (!(message.env && message.env.length))
                                             message.env = [];
-                                        message.env.push($root.google.cloud.run.v2.EnvVar.decode(reader, reader.uint32()));
+                                        message.env.push($root.google.cloud.run.v2.EnvVar.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 6: {
-                                        message.resources = $root.google.cloud.run.v2.ResourceRequirements.decode(reader, reader.uint32());
+                                        message.resources = $root.google.cloud.run.v2.ResourceRequirements.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
                                         if (!(message.ports && message.ports.length))
                                             message.ports = [];
-                                        message.ports.push($root.google.cloud.run.v2.ContainerPort.decode(reader, reader.uint32()));
+                                        message.ports.push($root.google.cloud.run.v2.ContainerPort.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 8: {
                                         if (!(message.volumeMounts && message.volumeMounts.length))
                                             message.volumeMounts = [];
-                                        message.volumeMounts.push($root.google.cloud.run.v2.VolumeMount.decode(reader, reader.uint32()));
+                                        message.volumeMounts.push($root.google.cloud.run.v2.VolumeMount.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 9: {
@@ -6096,15 +6292,15 @@
                                         break;
                                     }
                                 case 10: {
-                                        message.livenessProbe = $root.google.cloud.run.v2.Probe.decode(reader, reader.uint32());
+                                        message.livenessProbe = $root.google.cloud.run.v2.Probe.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 11: {
-                                        message.startupProbe = $root.google.cloud.run.v2.Probe.decode(reader, reader.uint32());
+                                        message.startupProbe = $root.google.cloud.run.v2.Probe.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 14: {
-                                        message.readinessProbe = $root.google.cloud.run.v2.Probe.decode(reader, reader.uint32());
+                                        message.readinessProbe = $root.google.cloud.run.v2.Probe.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 12: {
@@ -6118,11 +6314,11 @@
                                         break;
                                     }
                                 case 15: {
-                                        message.buildInfo = $root.google.cloud.run.v2.BuildInfo.decode(reader, reader.uint32());
+                                        message.buildInfo = $root.google.cloud.run.v2.BuildInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6153,9 +6349,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Container.verify = function verify(message) {
+                        Container.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -6163,7 +6363,7 @@
                                 if (!$util.isString(message.image))
                                     return "image: string expected";
                             if (message.sourceCode != null && message.hasOwnProperty("sourceCode")) {
-                                var error = $root.google.cloud.run.v2.SourceCode.verify(message.sourceCode);
+                                var error = $root.google.cloud.run.v2.SourceCode.verify(message.sourceCode, long + 1);
                                 if (error)
                                     return "sourceCode." + error;
                             }
@@ -6185,13 +6385,13 @@
                                 if (!Array.isArray(message.env))
                                     return "env: array expected";
                                 for (var i = 0; i < message.env.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.EnvVar.verify(message.env[i]);
+                                    var error = $root.google.cloud.run.v2.EnvVar.verify(message.env[i], long + 1);
                                     if (error)
                                         return "env." + error;
                                 }
                             }
                             if (message.resources != null && message.hasOwnProperty("resources")) {
-                                var error = $root.google.cloud.run.v2.ResourceRequirements.verify(message.resources);
+                                var error = $root.google.cloud.run.v2.ResourceRequirements.verify(message.resources, long + 1);
                                 if (error)
                                     return "resources." + error;
                             }
@@ -6199,7 +6399,7 @@
                                 if (!Array.isArray(message.ports))
                                     return "ports: array expected";
                                 for (var i = 0; i < message.ports.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.ContainerPort.verify(message.ports[i]);
+                                    var error = $root.google.cloud.run.v2.ContainerPort.verify(message.ports[i], long + 1);
                                     if (error)
                                         return "ports." + error;
                                 }
@@ -6208,7 +6408,7 @@
                                 if (!Array.isArray(message.volumeMounts))
                                     return "volumeMounts: array expected";
                                 for (var i = 0; i < message.volumeMounts.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.VolumeMount.verify(message.volumeMounts[i]);
+                                    var error = $root.google.cloud.run.v2.VolumeMount.verify(message.volumeMounts[i], long + 1);
                                     if (error)
                                         return "volumeMounts." + error;
                                 }
@@ -6217,17 +6417,17 @@
                                 if (!$util.isString(message.workingDir))
                                     return "workingDir: string expected";
                             if (message.livenessProbe != null && message.hasOwnProperty("livenessProbe")) {
-                                var error = $root.google.cloud.run.v2.Probe.verify(message.livenessProbe);
+                                var error = $root.google.cloud.run.v2.Probe.verify(message.livenessProbe, long + 1);
                                 if (error)
                                     return "livenessProbe." + error;
                             }
                             if (message.startupProbe != null && message.hasOwnProperty("startupProbe")) {
-                                var error = $root.google.cloud.run.v2.Probe.verify(message.startupProbe);
+                                var error = $root.google.cloud.run.v2.Probe.verify(message.startupProbe, long + 1);
                                 if (error)
                                     return "startupProbe." + error;
                             }
                             if (message.readinessProbe != null && message.hasOwnProperty("readinessProbe")) {
-                                var error = $root.google.cloud.run.v2.Probe.verify(message.readinessProbe);
+                                var error = $root.google.cloud.run.v2.Probe.verify(message.readinessProbe, long + 1);
                                 if (error)
                                     return "readinessProbe." + error;
                             }
@@ -6242,7 +6442,7 @@
                                 if (!$util.isString(message.baseImageUri))
                                     return "baseImageUri: string expected";
                             if (message.buildInfo != null && message.hasOwnProperty("buildInfo")) {
-                                var error = $root.google.cloud.run.v2.BuildInfo.verify(message.buildInfo);
+                                var error = $root.google.cloud.run.v2.BuildInfo.verify(message.buildInfo, long + 1);
                                 if (error)
                                     return "buildInfo." + error;
                             }
@@ -6257,9 +6457,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.Container} Container
                          */
-                        Container.fromObject = function fromObject(object) {
+                        Container.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.Container)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.Container();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -6268,7 +6472,7 @@
                             if (object.sourceCode != null) {
                                 if (typeof object.sourceCode !== "object")
                                     throw TypeError(".google.cloud.run.v2.Container.sourceCode: object expected");
-                                message.sourceCode = $root.google.cloud.run.v2.SourceCode.fromObject(object.sourceCode);
+                                message.sourceCode = $root.google.cloud.run.v2.SourceCode.fromObject(object.sourceCode, long + 1);
                             }
                             if (object.command) {
                                 if (!Array.isArray(object.command))
@@ -6291,13 +6495,13 @@
                                 for (var i = 0; i < object.env.length; ++i) {
                                     if (typeof object.env[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Container.env: object expected");
-                                    message.env[i] = $root.google.cloud.run.v2.EnvVar.fromObject(object.env[i]);
+                                    message.env[i] = $root.google.cloud.run.v2.EnvVar.fromObject(object.env[i], long + 1);
                                 }
                             }
                             if (object.resources != null) {
                                 if (typeof object.resources !== "object")
                                     throw TypeError(".google.cloud.run.v2.Container.resources: object expected");
-                                message.resources = $root.google.cloud.run.v2.ResourceRequirements.fromObject(object.resources);
+                                message.resources = $root.google.cloud.run.v2.ResourceRequirements.fromObject(object.resources, long + 1);
                             }
                             if (object.ports) {
                                 if (!Array.isArray(object.ports))
@@ -6306,7 +6510,7 @@
                                 for (var i = 0; i < object.ports.length; ++i) {
                                     if (typeof object.ports[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Container.ports: object expected");
-                                    message.ports[i] = $root.google.cloud.run.v2.ContainerPort.fromObject(object.ports[i]);
+                                    message.ports[i] = $root.google.cloud.run.v2.ContainerPort.fromObject(object.ports[i], long + 1);
                                 }
                             }
                             if (object.volumeMounts) {
@@ -6316,7 +6520,7 @@
                                 for (var i = 0; i < object.volumeMounts.length; ++i) {
                                     if (typeof object.volumeMounts[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Container.volumeMounts: object expected");
-                                    message.volumeMounts[i] = $root.google.cloud.run.v2.VolumeMount.fromObject(object.volumeMounts[i]);
+                                    message.volumeMounts[i] = $root.google.cloud.run.v2.VolumeMount.fromObject(object.volumeMounts[i], long + 1);
                                 }
                             }
                             if (object.workingDir != null)
@@ -6324,17 +6528,17 @@
                             if (object.livenessProbe != null) {
                                 if (typeof object.livenessProbe !== "object")
                                     throw TypeError(".google.cloud.run.v2.Container.livenessProbe: object expected");
-                                message.livenessProbe = $root.google.cloud.run.v2.Probe.fromObject(object.livenessProbe);
+                                message.livenessProbe = $root.google.cloud.run.v2.Probe.fromObject(object.livenessProbe, long + 1);
                             }
                             if (object.startupProbe != null) {
                                 if (typeof object.startupProbe !== "object")
                                     throw TypeError(".google.cloud.run.v2.Container.startupProbe: object expected");
-                                message.startupProbe = $root.google.cloud.run.v2.Probe.fromObject(object.startupProbe);
+                                message.startupProbe = $root.google.cloud.run.v2.Probe.fromObject(object.startupProbe, long + 1);
                             }
                             if (object.readinessProbe != null) {
                                 if (typeof object.readinessProbe !== "object")
                                     throw TypeError(".google.cloud.run.v2.Container.readinessProbe: object expected");
-                                message.readinessProbe = $root.google.cloud.run.v2.Probe.fromObject(object.readinessProbe);
+                                message.readinessProbe = $root.google.cloud.run.v2.Probe.fromObject(object.readinessProbe, long + 1);
                             }
                             if (object.dependsOn) {
                                 if (!Array.isArray(object.dependsOn))
@@ -6348,7 +6552,7 @@
                             if (object.buildInfo != null) {
                                 if (typeof object.buildInfo !== "object")
                                     throw TypeError(".google.cloud.run.v2.Container.buildInfo: object expected");
-                                message.buildInfo = $root.google.cloud.run.v2.BuildInfo.fromObject(object.buildInfo);
+                                message.buildInfo = $root.google.cloud.run.v2.BuildInfo.fromObject(object.buildInfo, long + 1);
                             }
                             return message;
                         };
@@ -6491,7 +6695,7 @@
                             this.limits = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -6577,9 +6781,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ResourceRequirements.decode = function decode(reader, length, error) {
+                        ResourceRequirements.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ResourceRequirements(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -6602,10 +6810,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.limits, key);
                                         message.limits[key] = value;
                                         break;
                                     }
@@ -6618,7 +6828,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6649,9 +6859,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ResourceRequirements.verify = function verify(message) {
+                        ResourceRequirements.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.limits != null && message.hasOwnProperty("limits")) {
                                 if (!$util.isObject(message.limits))
                                     return "limits: object expected";
@@ -6677,16 +6891,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ResourceRequirements} ResourceRequirements
                          */
-                        ResourceRequirements.fromObject = function fromObject(object) {
+                        ResourceRequirements.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ResourceRequirements)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ResourceRequirements();
                             if (object.limits) {
                                 if (typeof object.limits !== "object")
                                     throw TypeError(".google.cloud.run.v2.ResourceRequirements.limits: object expected");
                                 message.limits = {};
-                                for (var keys = Object.keys(object.limits), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.limits), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.limits, keys[i]);
                                     message.limits[keys[i]] = String(object.limits[keys[i]]);
+                                }
                             }
                             if (object.cpuIdle != null)
                                 message.cpuIdle = Boolean(object.cpuIdle);
@@ -6717,8 +6938,11 @@
                             var keys2;
                             if (message.limits && (keys2 = Object.keys(message.limits)).length) {
                                 object.limits = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.limits, keys2[j]);
                                     object.limits[keys2[j]] = message.limits[keys2[j]];
+                                }
                             }
                             if (message.cpuIdle != null && message.hasOwnProperty("cpuIdle"))
                                 object.cpuIdle = message.cpuIdle;
@@ -6778,7 +7002,7 @@
                         function EnvVar(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -6877,9 +7101,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        EnvVar.decode = function decode(reader, length, error) {
+                        EnvVar.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.EnvVar();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -6895,11 +7123,11 @@
                                         break;
                                     }
                                 case 3: {
-                                        message.valueSource = $root.google.cloud.run.v2.EnvVarSource.decode(reader, reader.uint32());
+                                        message.valueSource = $root.google.cloud.run.v2.EnvVarSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -6930,9 +7158,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        EnvVar.verify = function verify(message) {
+                        EnvVar.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
@@ -6947,7 +7179,7 @@
                                     return "values: multiple values";
                                 properties.values = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.EnvVarSource.verify(message.valueSource);
+                                    var error = $root.google.cloud.run.v2.EnvVarSource.verify(message.valueSource, long + 1);
                                     if (error)
                                         return "valueSource." + error;
                                 }
@@ -6963,9 +7195,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.EnvVar} EnvVar
                          */
-                        EnvVar.fromObject = function fromObject(object) {
+                        EnvVar.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.EnvVar)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.EnvVar();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -6974,7 +7210,7 @@
                             if (object.valueSource != null) {
                                 if (typeof object.valueSource !== "object")
                                     throw TypeError(".google.cloud.run.v2.EnvVar.valueSource: object expected");
-                                message.valueSource = $root.google.cloud.run.v2.EnvVarSource.fromObject(object.valueSource);
+                                message.valueSource = $root.google.cloud.run.v2.EnvVarSource.fromObject(object.valueSource, long + 1);
                             }
                             return message;
                         };
@@ -7058,7 +7294,7 @@
                         function EnvVarSource(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7123,9 +7359,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        EnvVarSource.decode = function decode(reader, length, error) {
+                        EnvVarSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.EnvVarSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7133,11 +7373,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.secretKeyRef = $root.google.cloud.run.v2.SecretKeySelector.decode(reader, reader.uint32());
+                                        message.secretKeyRef = $root.google.cloud.run.v2.SecretKeySelector.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7168,11 +7408,15 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        EnvVarSource.verify = function verify(message) {
+                        EnvVarSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.secretKeyRef != null && message.hasOwnProperty("secretKeyRef")) {
-                                var error = $root.google.cloud.run.v2.SecretKeySelector.verify(message.secretKeyRef);
+                                var error = $root.google.cloud.run.v2.SecretKeySelector.verify(message.secretKeyRef, long + 1);
                                 if (error)
                                     return "secretKeyRef." + error;
                             }
@@ -7187,14 +7431,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.EnvVarSource} EnvVarSource
                          */
-                        EnvVarSource.fromObject = function fromObject(object) {
+                        EnvVarSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.EnvVarSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.EnvVarSource();
                             if (object.secretKeyRef != null) {
                                 if (typeof object.secretKeyRef !== "object")
                                     throw TypeError(".google.cloud.run.v2.EnvVarSource.secretKeyRef: object expected");
-                                message.secretKeyRef = $root.google.cloud.run.v2.SecretKeySelector.fromObject(object.secretKeyRef);
+                                message.secretKeyRef = $root.google.cloud.run.v2.SecretKeySelector.fromObject(object.secretKeyRef, long + 1);
                             }
                             return message;
                         };
@@ -7269,7 +7517,7 @@
                         function SecretKeySelector(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7344,9 +7592,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SecretKeySelector.decode = function decode(reader, length, error) {
+                        SecretKeySelector.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.SecretKeySelector();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7362,7 +7614,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7393,9 +7645,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SecretKeySelector.verify = function verify(message) {
+                        SecretKeySelector.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.secret != null && message.hasOwnProperty("secret"))
                                 if (!$util.isString(message.secret))
                                     return "secret: string expected";
@@ -7413,9 +7669,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.SecretKeySelector} SecretKeySelector
                          */
-                        SecretKeySelector.fromObject = function fromObject(object) {
+                        SecretKeySelector.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.SecretKeySelector)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.SecretKeySelector();
                             if (object.secret != null)
                                 message.secret = String(object.secret);
@@ -7498,7 +7758,7 @@
                         function ContainerPort(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7573,9 +7833,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ContainerPort.decode = function decode(reader, length, error) {
+                        ContainerPort.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ContainerPort();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7591,7 +7855,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7622,9 +7886,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ContainerPort.verify = function verify(message) {
+                        ContainerPort.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -7642,9 +7910,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ContainerPort} ContainerPort
                          */
-                        ContainerPort.fromObject = function fromObject(object) {
+                        ContainerPort.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ContainerPort)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ContainerPort();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -7728,7 +8000,7 @@
                         function VolumeMount(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -7813,9 +8085,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        VolumeMount.decode = function decode(reader, length, error) {
+                        VolumeMount.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.VolumeMount();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -7835,7 +8111,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -7866,9 +8142,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        VolumeMount.verify = function verify(message) {
+                        VolumeMount.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -7889,9 +8169,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.VolumeMount} VolumeMount
                          */
-                        VolumeMount.fromObject = function fromObject(object) {
+                        VolumeMount.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.VolumeMount)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.VolumeMount();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -7983,7 +8267,7 @@
                         function Volume(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -8112,9 +8396,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Volume.decode = function decode(reader, length, error) {
+                        Volume.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Volume();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -8126,27 +8414,27 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.secret = $root.google.cloud.run.v2.SecretVolumeSource.decode(reader, reader.uint32());
+                                        message.secret = $root.google.cloud.run.v2.SecretVolumeSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.cloudSqlInstance = $root.google.cloud.run.v2.CloudSqlInstance.decode(reader, reader.uint32());
+                                        message.cloudSqlInstance = $root.google.cloud.run.v2.CloudSqlInstance.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
-                                        message.emptyDir = $root.google.cloud.run.v2.EmptyDirVolumeSource.decode(reader, reader.uint32());
+                                        message.emptyDir = $root.google.cloud.run.v2.EmptyDirVolumeSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
-                                        message.nfs = $root.google.cloud.run.v2.NFSVolumeSource.decode(reader, reader.uint32());
+                                        message.nfs = $root.google.cloud.run.v2.NFSVolumeSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.gcs = $root.google.cloud.run.v2.GCSVolumeSource.decode(reader, reader.uint32());
+                                        message.gcs = $root.google.cloud.run.v2.GCSVolumeSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -8177,9 +8465,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Volume.verify = function verify(message) {
+                        Volume.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
@@ -8187,7 +8479,7 @@
                             if (message.secret != null && message.hasOwnProperty("secret")) {
                                 properties.volumeType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.SecretVolumeSource.verify(message.secret);
+                                    var error = $root.google.cloud.run.v2.SecretVolumeSource.verify(message.secret, long + 1);
                                     if (error)
                                         return "secret." + error;
                                 }
@@ -8197,7 +8489,7 @@
                                     return "volumeType: multiple values";
                                 properties.volumeType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.CloudSqlInstance.verify(message.cloudSqlInstance);
+                                    var error = $root.google.cloud.run.v2.CloudSqlInstance.verify(message.cloudSqlInstance, long + 1);
                                     if (error)
                                         return "cloudSqlInstance." + error;
                                 }
@@ -8207,7 +8499,7 @@
                                     return "volumeType: multiple values";
                                 properties.volumeType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.EmptyDirVolumeSource.verify(message.emptyDir);
+                                    var error = $root.google.cloud.run.v2.EmptyDirVolumeSource.verify(message.emptyDir, long + 1);
                                     if (error)
                                         return "emptyDir." + error;
                                 }
@@ -8217,7 +8509,7 @@
                                     return "volumeType: multiple values";
                                 properties.volumeType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.NFSVolumeSource.verify(message.nfs);
+                                    var error = $root.google.cloud.run.v2.NFSVolumeSource.verify(message.nfs, long + 1);
                                     if (error)
                                         return "nfs." + error;
                                 }
@@ -8227,7 +8519,7 @@
                                     return "volumeType: multiple values";
                                 properties.volumeType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.GCSVolumeSource.verify(message.gcs);
+                                    var error = $root.google.cloud.run.v2.GCSVolumeSource.verify(message.gcs, long + 1);
                                     if (error)
                                         return "gcs." + error;
                                 }
@@ -8243,36 +8535,40 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.Volume} Volume
                          */
-                        Volume.fromObject = function fromObject(object) {
+                        Volume.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.Volume)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.Volume();
                             if (object.name != null)
                                 message.name = String(object.name);
                             if (object.secret != null) {
                                 if (typeof object.secret !== "object")
                                     throw TypeError(".google.cloud.run.v2.Volume.secret: object expected");
-                                message.secret = $root.google.cloud.run.v2.SecretVolumeSource.fromObject(object.secret);
+                                message.secret = $root.google.cloud.run.v2.SecretVolumeSource.fromObject(object.secret, long + 1);
                             }
                             if (object.cloudSqlInstance != null) {
                                 if (typeof object.cloudSqlInstance !== "object")
                                     throw TypeError(".google.cloud.run.v2.Volume.cloudSqlInstance: object expected");
-                                message.cloudSqlInstance = $root.google.cloud.run.v2.CloudSqlInstance.fromObject(object.cloudSqlInstance);
+                                message.cloudSqlInstance = $root.google.cloud.run.v2.CloudSqlInstance.fromObject(object.cloudSqlInstance, long + 1);
                             }
                             if (object.emptyDir != null) {
                                 if (typeof object.emptyDir !== "object")
                                     throw TypeError(".google.cloud.run.v2.Volume.emptyDir: object expected");
-                                message.emptyDir = $root.google.cloud.run.v2.EmptyDirVolumeSource.fromObject(object.emptyDir);
+                                message.emptyDir = $root.google.cloud.run.v2.EmptyDirVolumeSource.fromObject(object.emptyDir, long + 1);
                             }
                             if (object.nfs != null) {
                                 if (typeof object.nfs !== "object")
                                     throw TypeError(".google.cloud.run.v2.Volume.nfs: object expected");
-                                message.nfs = $root.google.cloud.run.v2.NFSVolumeSource.fromObject(object.nfs);
+                                message.nfs = $root.google.cloud.run.v2.NFSVolumeSource.fromObject(object.nfs, long + 1);
                             }
                             if (object.gcs != null) {
                                 if (typeof object.gcs !== "object")
                                     throw TypeError(".google.cloud.run.v2.Volume.gcs: object expected");
-                                message.gcs = $root.google.cloud.run.v2.GCSVolumeSource.fromObject(object.gcs);
+                                message.gcs = $root.google.cloud.run.v2.GCSVolumeSource.fromObject(object.gcs, long + 1);
                             }
                             return message;
                         };
@@ -8374,7 +8670,7 @@
                             this.items = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -8460,9 +8756,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SecretVolumeSource.decode = function decode(reader, length, error) {
+                        SecretVolumeSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.SecretVolumeSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -8476,7 +8776,7 @@
                                 case 2: {
                                         if (!(message.items && message.items.length))
                                             message.items = [];
-                                        message.items.push($root.google.cloud.run.v2.VersionToPath.decode(reader, reader.uint32()));
+                                        message.items.push($root.google.cloud.run.v2.VersionToPath.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 3: {
@@ -8484,7 +8784,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -8515,9 +8815,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SecretVolumeSource.verify = function verify(message) {
+                        SecretVolumeSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.secret != null && message.hasOwnProperty("secret"))
                                 if (!$util.isString(message.secret))
                                     return "secret: string expected";
@@ -8525,7 +8829,7 @@
                                 if (!Array.isArray(message.items))
                                     return "items: array expected";
                                 for (var i = 0; i < message.items.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.VersionToPath.verify(message.items[i]);
+                                    var error = $root.google.cloud.run.v2.VersionToPath.verify(message.items[i], long + 1);
                                     if (error)
                                         return "items." + error;
                                 }
@@ -8544,9 +8848,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.SecretVolumeSource} SecretVolumeSource
                          */
-                        SecretVolumeSource.fromObject = function fromObject(object) {
+                        SecretVolumeSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.SecretVolumeSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.SecretVolumeSource();
                             if (object.secret != null)
                                 message.secret = String(object.secret);
@@ -8557,7 +8865,7 @@
                                 for (var i = 0; i < object.items.length; ++i) {
                                     if (typeof object.items[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.SecretVolumeSource.items: object expected");
-                                    message.items[i] = $root.google.cloud.run.v2.VersionToPath.fromObject(object.items[i]);
+                                    message.items[i] = $root.google.cloud.run.v2.VersionToPath.fromObject(object.items[i], long + 1);
                                 }
                             }
                             if (object.defaultMode != null)
@@ -8647,7 +8955,7 @@
                         function VersionToPath(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -8732,9 +9040,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        VersionToPath.decode = function decode(reader, length, error) {
+                        VersionToPath.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.VersionToPath();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -8754,7 +9066,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -8785,9 +9097,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        VersionToPath.verify = function verify(message) {
+                        VersionToPath.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.path != null && message.hasOwnProperty("path"))
                                 if (!$util.isString(message.path))
                                     return "path: string expected";
@@ -8808,9 +9124,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.VersionToPath} VersionToPath
                          */
-                        VersionToPath.fromObject = function fromObject(object) {
+                        VersionToPath.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.VersionToPath)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.VersionToPath();
                             if (object.path != null)
                                 message.path = String(object.path);
@@ -8898,7 +9218,7 @@
                             this.instances = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -8964,9 +9284,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CloudSqlInstance.decode = function decode(reader, length, error) {
+                        CloudSqlInstance.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.CloudSqlInstance();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -8980,7 +9304,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9011,9 +9335,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CloudSqlInstance.verify = function verify(message) {
+                        CloudSqlInstance.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.instances != null && message.hasOwnProperty("instances")) {
                                 if (!Array.isArray(message.instances))
                                     return "instances: array expected";
@@ -9032,9 +9360,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.CloudSqlInstance} CloudSqlInstance
                          */
-                        CloudSqlInstance.fromObject = function fromObject(object) {
+                        CloudSqlInstance.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.CloudSqlInstance)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.CloudSqlInstance();
                             if (object.instances) {
                                 if (!Array.isArray(object.instances))
@@ -9119,7 +9451,7 @@
                         function EmptyDirVolumeSource(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -9194,9 +9526,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        EmptyDirVolumeSource.decode = function decode(reader, length, error) {
+                        EmptyDirVolumeSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.EmptyDirVolumeSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -9212,7 +9548,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9243,9 +9579,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        EmptyDirVolumeSource.verify = function verify(message) {
+                        EmptyDirVolumeSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.medium != null && message.hasOwnProperty("medium"))
                                 switch (message.medium) {
                                 default:
@@ -9268,9 +9608,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.EmptyDirVolumeSource} EmptyDirVolumeSource
                          */
-                        EmptyDirVolumeSource.fromObject = function fromObject(object) {
+                        EmptyDirVolumeSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.EmptyDirVolumeSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.EmptyDirVolumeSource();
                             switch (object.medium) {
                             default:
@@ -9382,7 +9726,7 @@
                         function NFSVolumeSource(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -9467,9 +9811,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        NFSVolumeSource.decode = function decode(reader, length, error) {
+                        NFSVolumeSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.NFSVolumeSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -9489,7 +9837,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9520,9 +9868,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        NFSVolumeSource.verify = function verify(message) {
+                        NFSVolumeSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.server != null && message.hasOwnProperty("server"))
                                 if (!$util.isString(message.server))
                                     return "server: string expected";
@@ -9543,9 +9895,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.NFSVolumeSource} NFSVolumeSource
                          */
-                        NFSVolumeSource.fromObject = function fromObject(object) {
+                        NFSVolumeSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.NFSVolumeSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.NFSVolumeSource();
                             if (object.server != null)
                                 message.server = String(object.server);
@@ -9635,7 +9991,7 @@
                             this.mountOptions = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -9721,9 +10077,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GCSVolumeSource.decode = function decode(reader, length, error) {
+                        GCSVolumeSource.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.GCSVolumeSource();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -9745,7 +10105,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -9776,9 +10136,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GCSVolumeSource.verify = function verify(message) {
+                        GCSVolumeSource.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.bucket != null && message.hasOwnProperty("bucket"))
                                 if (!$util.isString(message.bucket))
                                     return "bucket: string expected";
@@ -9803,9 +10167,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.GCSVolumeSource} GCSVolumeSource
                          */
-                        GCSVolumeSource.fromObject = function fromObject(object) {
+                        GCSVolumeSource.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.GCSVolumeSource)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.GCSVolumeSource();
                             if (object.bucket != null)
                                 message.bucket = String(object.bucket);
@@ -9907,7 +10275,7 @@
                         function Probe(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10046,9 +10414,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Probe.decode = function decode(reader, length, error) {
+                        Probe.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Probe();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10072,19 +10444,19 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.httpGet = $root.google.cloud.run.v2.HTTPGetAction.decode(reader, reader.uint32());
+                                        message.httpGet = $root.google.cloud.run.v2.HTTPGetAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.tcpSocket = $root.google.cloud.run.v2.TCPSocketAction.decode(reader, reader.uint32());
+                                        message.tcpSocket = $root.google.cloud.run.v2.TCPSocketAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.grpc = $root.google.cloud.run.v2.GRPCAction.decode(reader, reader.uint32());
+                                        message.grpc = $root.google.cloud.run.v2.GRPCAction.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10115,9 +10487,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Probe.verify = function verify(message) {
+                        Probe.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.initialDelaySeconds != null && message.hasOwnProperty("initialDelaySeconds"))
                                 if (!$util.isInteger(message.initialDelaySeconds))
@@ -10134,7 +10510,7 @@
                             if (message.httpGet != null && message.hasOwnProperty("httpGet")) {
                                 properties.probeType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.HTTPGetAction.verify(message.httpGet);
+                                    var error = $root.google.cloud.run.v2.HTTPGetAction.verify(message.httpGet, long + 1);
                                     if (error)
                                         return "httpGet." + error;
                                 }
@@ -10144,7 +10520,7 @@
                                     return "probeType: multiple values";
                                 properties.probeType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.TCPSocketAction.verify(message.tcpSocket);
+                                    var error = $root.google.cloud.run.v2.TCPSocketAction.verify(message.tcpSocket, long + 1);
                                     if (error)
                                         return "tcpSocket." + error;
                                 }
@@ -10154,7 +10530,7 @@
                                     return "probeType: multiple values";
                                 properties.probeType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.GRPCAction.verify(message.grpc);
+                                    var error = $root.google.cloud.run.v2.GRPCAction.verify(message.grpc, long + 1);
                                     if (error)
                                         return "grpc." + error;
                                 }
@@ -10170,9 +10546,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.Probe} Probe
                          */
-                        Probe.fromObject = function fromObject(object) {
+                        Probe.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.Probe)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.Probe();
                             if (object.initialDelaySeconds != null)
                                 message.initialDelaySeconds = object.initialDelaySeconds | 0;
@@ -10185,17 +10565,17 @@
                             if (object.httpGet != null) {
                                 if (typeof object.httpGet !== "object")
                                     throw TypeError(".google.cloud.run.v2.Probe.httpGet: object expected");
-                                message.httpGet = $root.google.cloud.run.v2.HTTPGetAction.fromObject(object.httpGet);
+                                message.httpGet = $root.google.cloud.run.v2.HTTPGetAction.fromObject(object.httpGet, long + 1);
                             }
                             if (object.tcpSocket != null) {
                                 if (typeof object.tcpSocket !== "object")
                                     throw TypeError(".google.cloud.run.v2.Probe.tcpSocket: object expected");
-                                message.tcpSocket = $root.google.cloud.run.v2.TCPSocketAction.fromObject(object.tcpSocket);
+                                message.tcpSocket = $root.google.cloud.run.v2.TCPSocketAction.fromObject(object.tcpSocket, long + 1);
                             }
                             if (object.grpc != null) {
                                 if (typeof object.grpc !== "object")
                                     throw TypeError(".google.cloud.run.v2.Probe.grpc: object expected");
-                                message.grpc = $root.google.cloud.run.v2.GRPCAction.fromObject(object.grpc);
+                                message.grpc = $root.google.cloud.run.v2.GRPCAction.fromObject(object.grpc, long + 1);
                             }
                             return message;
                         };
@@ -10297,7 +10677,7 @@
                             this.httpHeaders = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10383,9 +10763,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        HTTPGetAction.decode = function decode(reader, length, error) {
+                        HTTPGetAction.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.HTTPGetAction();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10399,7 +10783,7 @@
                                 case 4: {
                                         if (!(message.httpHeaders && message.httpHeaders.length))
                                             message.httpHeaders = [];
-                                        message.httpHeaders.push($root.google.cloud.run.v2.HTTPHeader.decode(reader, reader.uint32()));
+                                        message.httpHeaders.push($root.google.cloud.run.v2.HTTPHeader.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 5: {
@@ -10407,7 +10791,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10438,9 +10822,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        HTTPGetAction.verify = function verify(message) {
+                        HTTPGetAction.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.path != null && message.hasOwnProperty("path"))
                                 if (!$util.isString(message.path))
                                     return "path: string expected";
@@ -10448,7 +10836,7 @@
                                 if (!Array.isArray(message.httpHeaders))
                                     return "httpHeaders: array expected";
                                 for (var i = 0; i < message.httpHeaders.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.HTTPHeader.verify(message.httpHeaders[i]);
+                                    var error = $root.google.cloud.run.v2.HTTPHeader.verify(message.httpHeaders[i], long + 1);
                                     if (error)
                                         return "httpHeaders." + error;
                                 }
@@ -10467,9 +10855,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.HTTPGetAction} HTTPGetAction
                          */
-                        HTTPGetAction.fromObject = function fromObject(object) {
+                        HTTPGetAction.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.HTTPGetAction)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.HTTPGetAction();
                             if (object.path != null)
                                 message.path = String(object.path);
@@ -10480,7 +10872,7 @@
                                 for (var i = 0; i < object.httpHeaders.length; ++i) {
                                     if (typeof object.httpHeaders[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.HTTPGetAction.httpHeaders: object expected");
-                                    message.httpHeaders[i] = $root.google.cloud.run.v2.HTTPHeader.fromObject(object.httpHeaders[i]);
+                                    message.httpHeaders[i] = $root.google.cloud.run.v2.HTTPHeader.fromObject(object.httpHeaders[i], long + 1);
                                 }
                             }
                             if (object.port != null)
@@ -10569,7 +10961,7 @@
                         function HTTPHeader(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10644,9 +11036,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        HTTPHeader.decode = function decode(reader, length, error) {
+                        HTTPHeader.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.HTTPHeader();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10662,7 +11058,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10693,9 +11089,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        HTTPHeader.verify = function verify(message) {
+                        HTTPHeader.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -10713,9 +11113,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.HTTPHeader} HTTPHeader
                          */
-                        HTTPHeader.fromObject = function fromObject(object) {
+                        HTTPHeader.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.HTTPHeader)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.HTTPHeader();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -10797,7 +11201,7 @@
                         function TCPSocketAction(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -10862,9 +11266,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TCPSocketAction.decode = function decode(reader, length, error) {
+                        TCPSocketAction.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.TCPSocketAction();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -10876,7 +11284,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -10907,9 +11315,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TCPSocketAction.verify = function verify(message) {
+                        TCPSocketAction.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.port != null && message.hasOwnProperty("port"))
                                 if (!$util.isInteger(message.port))
                                     return "port: integer expected";
@@ -10924,9 +11336,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.TCPSocketAction} TCPSocketAction
                          */
-                        TCPSocketAction.fromObject = function fromObject(object) {
+                        TCPSocketAction.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.TCPSocketAction)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.TCPSocketAction();
                             if (object.port != null)
                                 message.port = object.port | 0;
@@ -11003,7 +11419,7 @@
                         function GRPCAction(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11078,9 +11494,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GRPCAction.decode = function decode(reader, length, error) {
+                        GRPCAction.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.GRPCAction();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11096,7 +11516,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11127,9 +11547,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GRPCAction.verify = function verify(message) {
+                        GRPCAction.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.port != null && message.hasOwnProperty("port"))
                                 if (!$util.isInteger(message.port))
                                     return "port: integer expected";
@@ -11147,9 +11571,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.GRPCAction} GRPCAction
                          */
-                        GRPCAction.fromObject = function fromObject(object) {
+                        GRPCAction.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.GRPCAction)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.GRPCAction();
                             if (object.port != null)
                                 message.port = object.port | 0;
@@ -11232,7 +11660,7 @@
                         function BuildInfo(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11307,9 +11735,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BuildInfo.decode = function decode(reader, length, error) {
+                        BuildInfo.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.BuildInfo();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11325,7 +11757,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11356,9 +11788,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BuildInfo.verify = function verify(message) {
+                        BuildInfo.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.functionTarget != null && message.hasOwnProperty("functionTarget"))
                                 if (!$util.isString(message.functionTarget))
                                     return "functionTarget: string expected";
@@ -11376,9 +11812,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.BuildInfo} BuildInfo
                          */
-                        BuildInfo.fromObject = function fromObject(object) {
+                        BuildInfo.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.BuildInfo)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.BuildInfo();
                             if (object.functionTarget != null)
                                 message.functionTarget = String(object.functionTarget);
@@ -11460,7 +11900,7 @@
                         function SourceCode(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -11539,9 +11979,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        SourceCode.decode = function decode(reader, length, error) {
+                        SourceCode.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.SourceCode();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -11549,11 +11993,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.cloudStorageSource = $root.google.cloud.run.v2.SourceCode.CloudStorageSource.decode(reader, reader.uint32());
+                                        message.cloudStorageSource = $root.google.cloud.run.v2.SourceCode.CloudStorageSource.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -11584,14 +12028,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        SourceCode.verify = function verify(message) {
+                        SourceCode.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.cloudStorageSource != null && message.hasOwnProperty("cloudStorageSource")) {
                                 properties.sourceType = 1;
                                 {
-                                    var error = $root.google.cloud.run.v2.SourceCode.CloudStorageSource.verify(message.cloudStorageSource);
+                                    var error = $root.google.cloud.run.v2.SourceCode.CloudStorageSource.verify(message.cloudStorageSource, long + 1);
                                     if (error)
                                         return "cloudStorageSource." + error;
                                 }
@@ -11607,14 +12055,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.SourceCode} SourceCode
                          */
-                        SourceCode.fromObject = function fromObject(object) {
+                        SourceCode.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.SourceCode)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.SourceCode();
                             if (object.cloudStorageSource != null) {
                                 if (typeof object.cloudStorageSource !== "object")
                                     throw TypeError(".google.cloud.run.v2.SourceCode.cloudStorageSource: object expected");
-                                message.cloudStorageSource = $root.google.cloud.run.v2.SourceCode.CloudStorageSource.fromObject(object.cloudStorageSource);
+                                message.cloudStorageSource = $root.google.cloud.run.v2.SourceCode.CloudStorageSource.fromObject(object.cloudStorageSource, long + 1);
                             }
                             return message;
                         };
@@ -11688,7 +12140,7 @@
                             function CloudStorageSource(properties) {
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -11773,9 +12225,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            CloudStorageSource.decode = function decode(reader, length, error) {
+                            CloudStorageSource.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.SourceCode.CloudStorageSource();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -11795,7 +12251,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -11826,9 +12282,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            CloudStorageSource.verify = function verify(message) {
+                            CloudStorageSource.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.bucket != null && message.hasOwnProperty("bucket"))
                                     if (!$util.isString(message.bucket))
                                         return "bucket: string expected";
@@ -11849,9 +12309,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.run.v2.SourceCode.CloudStorageSource} CloudStorageSource
                              */
-                            CloudStorageSource.fromObject = function fromObject(object) {
+                            CloudStorageSource.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.run.v2.SourceCode.CloudStorageSource)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.run.v2.SourceCode.CloudStorageSource();
                                 if (object.bucket != null)
                                     message.bucket = String(object.bucket);
@@ -11958,7 +12422,7 @@
                             this.networkInterfaces = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12044,9 +12508,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        VpcAccess.decode = function decode(reader, length, error) {
+                        VpcAccess.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.VpcAccess();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12064,11 +12532,11 @@
                                 case 3: {
                                         if (!(message.networkInterfaces && message.networkInterfaces.length))
                                             message.networkInterfaces = [];
-                                        message.networkInterfaces.push($root.google.cloud.run.v2.VpcAccess.NetworkInterface.decode(reader, reader.uint32()));
+                                        message.networkInterfaces.push($root.google.cloud.run.v2.VpcAccess.NetworkInterface.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12099,9 +12567,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        VpcAccess.verify = function verify(message) {
+                        VpcAccess.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.connector != null && message.hasOwnProperty("connector"))
                                 if (!$util.isString(message.connector))
                                     return "connector: string expected";
@@ -12118,7 +12590,7 @@
                                 if (!Array.isArray(message.networkInterfaces))
                                     return "networkInterfaces: array expected";
                                 for (var i = 0; i < message.networkInterfaces.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.VpcAccess.NetworkInterface.verify(message.networkInterfaces[i]);
+                                    var error = $root.google.cloud.run.v2.VpcAccess.NetworkInterface.verify(message.networkInterfaces[i], long + 1);
                                     if (error)
                                         return "networkInterfaces." + error;
                                 }
@@ -12134,9 +12606,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.VpcAccess} VpcAccess
                          */
-                        VpcAccess.fromObject = function fromObject(object) {
+                        VpcAccess.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.VpcAccess)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.VpcAccess();
                             if (object.connector != null)
                                 message.connector = String(object.connector);
@@ -12167,7 +12643,7 @@
                                 for (var i = 0; i < object.networkInterfaces.length; ++i) {
                                     if (typeof object.networkInterfaces[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.VpcAccess.networkInterfaces: object expected");
-                                    message.networkInterfaces[i] = $root.google.cloud.run.v2.VpcAccess.NetworkInterface.fromObject(object.networkInterfaces[i]);
+                                    message.networkInterfaces[i] = $root.google.cloud.run.v2.VpcAccess.NetworkInterface.fromObject(object.networkInterfaces[i], long + 1);
                                 }
                             }
                             return message;
@@ -12269,7 +12745,7 @@
                                 this.tags = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -12355,9 +12831,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            NetworkInterface.decode = function decode(reader, length, error) {
+                            NetworkInterface.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.VpcAccess.NetworkInterface();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -12379,7 +12859,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -12410,9 +12890,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            NetworkInterface.verify = function verify(message) {
+                            NetworkInterface.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.network != null && message.hasOwnProperty("network"))
                                     if (!$util.isString(message.network))
                                         return "network: string expected";
@@ -12437,9 +12921,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.run.v2.VpcAccess.NetworkInterface} NetworkInterface
                              */
-                            NetworkInterface.fromObject = function fromObject(object) {
+                            NetworkInterface.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.run.v2.VpcAccess.NetworkInterface)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.run.v2.VpcAccess.NetworkInterface();
                                 if (object.network != null)
                                     message.network = String(object.network);
@@ -12540,7 +13028,7 @@
                         function BinaryAuthorization(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12639,9 +13127,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BinaryAuthorization.decode = function decode(reader, length, error) {
+                        BinaryAuthorization.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.BinaryAuthorization();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12661,7 +13153,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12692,9 +13184,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BinaryAuthorization.verify = function verify(message) {
+                        BinaryAuthorization.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.useDefault != null && message.hasOwnProperty("useDefault")) {
                                 properties.binauthzMethod = 1;
@@ -12722,9 +13218,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.BinaryAuthorization} BinaryAuthorization
                          */
-                        BinaryAuthorization.fromObject = function fromObject(object) {
+                        BinaryAuthorization.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.BinaryAuthorization)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.BinaryAuthorization();
                             if (object.useDefault != null)
                                 message.useDefault = Boolean(object.useDefault);
@@ -12815,7 +13315,7 @@
                         function RevisionScaling(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -12890,9 +13390,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RevisionScaling.decode = function decode(reader, length, error) {
+                        RevisionScaling.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.RevisionScaling();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -12908,7 +13412,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -12939,9 +13443,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RevisionScaling.verify = function verify(message) {
+                        RevisionScaling.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.minInstanceCount != null && message.hasOwnProperty("minInstanceCount"))
                                 if (!$util.isInteger(message.minInstanceCount))
                                     return "minInstanceCount: integer expected";
@@ -12959,9 +13467,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.RevisionScaling} RevisionScaling
                          */
-                        RevisionScaling.fromObject = function fromObject(object) {
+                        RevisionScaling.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.RevisionScaling)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.RevisionScaling();
                             if (object.minInstanceCount != null)
                                 message.minInstanceCount = object.minInstanceCount | 0;
@@ -13043,7 +13555,7 @@
                         function ServiceMesh(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13108,9 +13620,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ServiceMesh.decode = function decode(reader, length, error) {
+                        ServiceMesh.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ServiceMesh();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13122,7 +13638,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13153,9 +13669,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ServiceMesh.verify = function verify(message) {
+                        ServiceMesh.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.mesh != null && message.hasOwnProperty("mesh"))
                                 if (!$util.isString(message.mesh))
                                     return "mesh: string expected";
@@ -13170,9 +13690,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ServiceMesh} ServiceMesh
                          */
-                        ServiceMesh.fromObject = function fromObject(object) {
+                        ServiceMesh.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ServiceMesh)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ServiceMesh();
                             if (object.mesh != null)
                                 message.mesh = String(object.mesh);
@@ -13251,7 +13775,7 @@
                         function ServiceScaling(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13355,9 +13879,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ServiceScaling.decode = function decode(reader, length, error) {
+                        ServiceScaling.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ServiceScaling();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13381,7 +13909,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13412,9 +13940,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ServiceScaling.verify = function verify(message) {
+                        ServiceScaling.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.minInstanceCount != null && message.hasOwnProperty("minInstanceCount"))
                                 if (!$util.isInteger(message.minInstanceCount))
@@ -13447,9 +13979,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ServiceScaling} ServiceScaling
                          */
-                        ServiceScaling.fromObject = function fromObject(object) {
+                        ServiceScaling.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ServiceScaling)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ServiceScaling();
                             if (object.minInstanceCount != null)
                                 message.minInstanceCount = object.minInstanceCount | 0;
@@ -13577,7 +14113,7 @@
                         function WorkerPoolScaling(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13651,9 +14187,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        WorkerPoolScaling.decode = function decode(reader, length, error) {
+                        WorkerPoolScaling.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.WorkerPoolScaling();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13665,7 +14205,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13696,9 +14236,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        WorkerPoolScaling.verify = function verify(message) {
+                        WorkerPoolScaling.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.manualInstanceCount != null && message.hasOwnProperty("manualInstanceCount")) {
                                 properties._manualInstanceCount = 1;
@@ -13716,9 +14260,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.WorkerPoolScaling} WorkerPoolScaling
                          */
-                        WorkerPoolScaling.fromObject = function fromObject(object) {
+                        WorkerPoolScaling.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.WorkerPoolScaling)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.WorkerPoolScaling();
                             if (object.manualInstanceCount != null)
                                 message.manualInstanceCount = object.manualInstanceCount | 0;
@@ -13795,7 +14343,7 @@
                         function NodeSelector(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -13860,9 +14408,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        NodeSelector.decode = function decode(reader, length, error) {
+                        NodeSelector.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.NodeSelector();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -13874,7 +14426,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -13905,9 +14457,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        NodeSelector.verify = function verify(message) {
+                        NodeSelector.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.accelerator != null && message.hasOwnProperty("accelerator"))
                                 if (!$util.isString(message.accelerator))
                                     return "accelerator: string expected";
@@ -13922,9 +14478,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.NodeSelector} NodeSelector
                          */
-                        NodeSelector.fromObject = function fromObject(object) {
+                        NodeSelector.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.NodeSelector)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.NodeSelector();
                             if (object.accelerator != null)
                                 message.accelerator = String(object.accelerator);
@@ -14009,7 +14569,7 @@
                             this.environmentVariables = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14155,9 +14715,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        BuildConfig.decode = function decode(reader, length, error) {
+                        BuildConfig.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.BuildConfig(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14208,10 +14772,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.environmentVariables, key);
                                         message.environmentVariables[key] = value;
                                         break;
                                     }
@@ -14220,7 +14786,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14251,9 +14817,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        BuildConfig.verify = function verify(message) {
+                        BuildConfig.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -14297,9 +14867,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.BuildConfig} BuildConfig
                          */
-                        BuildConfig.fromObject = function fromObject(object) {
+                        BuildConfig.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.BuildConfig)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.BuildConfig();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -14319,8 +14893,11 @@
                                 if (typeof object.environmentVariables !== "object")
                                     throw TypeError(".google.cloud.run.v2.BuildConfig.environmentVariables: object expected");
                                 message.environmentVariables = {};
-                                for (var keys = Object.keys(object.environmentVariables), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.environmentVariables), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.environmentVariables, keys[i]);
                                     message.environmentVariables[keys[i]] = String(object.environmentVariables[keys[i]]);
+                                }
                             }
                             if (object.serviceAccount != null)
                                 message.serviceAccount = String(object.serviceAccount);
@@ -14369,8 +14946,11 @@
                             var keys2;
                             if (message.environmentVariables && (keys2 = Object.keys(message.environmentVariables)).length) {
                                 object.environmentVariables = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.environmentVariables, keys2[j]);
                                     object.environmentVariables[keys2[j]] = message.environmentVariables[keys2[j]];
+                                }
                             }
                             if (message.serviceAccount != null && message.hasOwnProperty("serviceAccount"))
                                 object.serviceAccount = message.serviceAccount;
@@ -14484,7 +15064,7 @@
                             this.annotations = {};
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -14591,9 +15171,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExecutionTemplate.decode = function decode(reader, length, error) {
+                        ExecutionTemplate.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ExecutionTemplate(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -14616,10 +15200,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -14639,10 +15225,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.annotations, key);
                                         message.annotations[key] = value;
                                         break;
                                     }
@@ -14655,11 +15243,11 @@
                                         break;
                                     }
                                 case 5: {
-                                        message.template = $root.google.cloud.run.v2.TaskTemplate.decode(reader, reader.uint32());
+                                        message.template = $root.google.cloud.run.v2.TaskTemplate.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -14690,9 +15278,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExecutionTemplate.verify = function verify(message) {
+                        ExecutionTemplate.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.labels != null && message.hasOwnProperty("labels")) {
                                 if (!$util.isObject(message.labels))
                                     return "labels: object expected";
@@ -14716,7 +15308,7 @@
                                 if (!$util.isInteger(message.taskCount))
                                     return "taskCount: integer expected";
                             if (message.template != null && message.hasOwnProperty("template")) {
-                                var error = $root.google.cloud.run.v2.TaskTemplate.verify(message.template);
+                                var error = $root.google.cloud.run.v2.TaskTemplate.verify(message.template, long + 1);
                                 if (error)
                                     return "template." + error;
                             }
@@ -14731,23 +15323,33 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ExecutionTemplate} ExecutionTemplate
                          */
-                        ExecutionTemplate.fromObject = function fromObject(object) {
+                        ExecutionTemplate.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ExecutionTemplate)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ExecutionTemplate();
                             if (object.labels) {
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.run.v2.ExecutionTemplate.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.annotations) {
                                 if (typeof object.annotations !== "object")
                                     throw TypeError(".google.cloud.run.v2.ExecutionTemplate.annotations: object expected");
                                 message.annotations = {};
-                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.annotations, keys[i]);
                                     message.annotations[keys[i]] = String(object.annotations[keys[i]]);
+                                }
                             }
                             if (object.parallelism != null)
                                 message.parallelism = object.parallelism | 0;
@@ -14756,7 +15358,7 @@
                             if (object.template != null) {
                                 if (typeof object.template !== "object")
                                     throw TypeError(".google.cloud.run.v2.ExecutionTemplate.template: object expected");
-                                message.template = $root.google.cloud.run.v2.TaskTemplate.fromObject(object.template);
+                                message.template = $root.google.cloud.run.v2.TaskTemplate.fromObject(object.template, long + 1);
                             }
                             return message;
                         };
@@ -14786,13 +15388,19 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.annotations && (keys2 = Object.keys(message.annotations)).length) {
                                 object.annotations = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.annotations, keys2[j]);
                                     object.annotations[keys2[j]] = message.annotations[keys2[j]];
+                                }
                             }
                             if (message.parallelism != null && message.hasOwnProperty("parallelism"))
                                 object.parallelism = message.parallelism;
@@ -15088,7 +15696,7 @@
                         function CreateInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15183,9 +15791,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateInstanceRequest.decode = function decode(reader, length, error) {
+                        CreateInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.CreateInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15197,7 +15809,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.instance = $root.google.cloud.run.v2.Instance.decode(reader, reader.uint32());
+                                        message.instance = $root.google.cloud.run.v2.Instance.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -15209,7 +15821,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15240,14 +15852,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateInstanceRequest.verify = function verify(message) {
+                        CreateInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.instance != null && message.hasOwnProperty("instance")) {
-                                var error = $root.google.cloud.run.v2.Instance.verify(message.instance);
+                                var error = $root.google.cloud.run.v2.Instance.verify(message.instance, long + 1);
                                 if (error)
                                     return "instance." + error;
                             }
@@ -15268,16 +15884,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.CreateInstanceRequest} CreateInstanceRequest
                          */
-                        CreateInstanceRequest.fromObject = function fromObject(object) {
+                        CreateInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.CreateInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.CreateInstanceRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.instance != null) {
                                 if (typeof object.instance !== "object")
                                     throw TypeError(".google.cloud.run.v2.CreateInstanceRequest.instance: object expected");
-                                message.instance = $root.google.cloud.run.v2.Instance.fromObject(object.instance);
+                                message.instance = $root.google.cloud.run.v2.Instance.fromObject(object.instance, long + 1);
                             }
                             if (object.instanceId != null)
                                 message.instanceId = String(object.instanceId);
@@ -15365,7 +15985,7 @@
                         function GetInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15430,9 +16050,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetInstanceRequest.decode = function decode(reader, length, error) {
+                        GetInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.GetInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15444,7 +16068,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15475,9 +16099,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetInstanceRequest.verify = function verify(message) {
+                        GetInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -15492,9 +16120,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.GetInstanceRequest} GetInstanceRequest
                          */
-                        GetInstanceRequest.fromObject = function fromObject(object) {
+                        GetInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.GetInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.GetInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -15572,7 +16204,7 @@
                         function DeleteInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15657,9 +16289,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteInstanceRequest.decode = function decode(reader, length, error) {
+                        DeleteInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.DeleteInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15679,7 +16315,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15710,9 +16346,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteInstanceRequest.verify = function verify(message) {
+                        DeleteInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -15733,9 +16373,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.DeleteInstanceRequest} DeleteInstanceRequest
                          */
-                        DeleteInstanceRequest.fromObject = function fromObject(object) {
+                        DeleteInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.DeleteInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.DeleteInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -15825,7 +16469,7 @@
                         function ListInstancesRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -15920,9 +16564,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListInstancesRequest.decode = function decode(reader, length, error) {
+                        ListInstancesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListInstancesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -15946,7 +16594,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -15977,9 +16625,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListInstancesRequest.verify = function verify(message) {
+                        ListInstancesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -16003,9 +16655,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListInstancesRequest} ListInstancesRequest
                          */
-                        ListInstancesRequest.fromObject = function fromObject(object) {
+                        ListInstancesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListInstancesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListInstancesRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -16099,7 +16755,7 @@
                             this.instances = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16175,9 +16831,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListInstancesResponse.decode = function decode(reader, length, error) {
+                        ListInstancesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListInstancesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16187,7 +16847,7 @@
                                 case 1: {
                                         if (!(message.instances && message.instances.length))
                                             message.instances = [];
-                                        message.instances.push($root.google.cloud.run.v2.Instance.decode(reader, reader.uint32()));
+                                        message.instances.push($root.google.cloud.run.v2.Instance.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -16195,7 +16855,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16226,14 +16886,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListInstancesResponse.verify = function verify(message) {
+                        ListInstancesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.instances != null && message.hasOwnProperty("instances")) {
                                 if (!Array.isArray(message.instances))
                                     return "instances: array expected";
                                 for (var i = 0; i < message.instances.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Instance.verify(message.instances[i]);
+                                    var error = $root.google.cloud.run.v2.Instance.verify(message.instances[i], long + 1);
                                     if (error)
                                         return "instances." + error;
                                 }
@@ -16252,9 +16916,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListInstancesResponse} ListInstancesResponse
                          */
-                        ListInstancesResponse.fromObject = function fromObject(object) {
+                        ListInstancesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListInstancesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListInstancesResponse();
                             if (object.instances) {
                                 if (!Array.isArray(object.instances))
@@ -16263,7 +16931,7 @@
                                 for (var i = 0; i < object.instances.length; ++i) {
                                     if (typeof object.instances[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.ListInstancesResponse.instances: object expected");
-                                    message.instances[i] = $root.google.cloud.run.v2.Instance.fromObject(object.instances[i]);
+                                    message.instances[i] = $root.google.cloud.run.v2.Instance.fromObject(object.instances[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -16349,7 +17017,7 @@
                         function StopInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16434,9 +17102,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        StopInstanceRequest.decode = function decode(reader, length, error) {
+                        StopInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.StopInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16456,7 +17128,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16487,9 +17159,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        StopInstanceRequest.verify = function verify(message) {
+                        StopInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -16510,9 +17186,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.StopInstanceRequest} StopInstanceRequest
                          */
-                        StopInstanceRequest.fromObject = function fromObject(object) {
+                        StopInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.StopInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.StopInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -16601,7 +17281,7 @@
                         function StartInstanceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -16686,9 +17366,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        StartInstanceRequest.decode = function decode(reader, length, error) {
+                        StartInstanceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.StartInstanceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -16708,7 +17392,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -16739,9 +17423,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        StartInstanceRequest.verify = function verify(message) {
+                        StartInstanceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -16762,9 +17450,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.StartInstanceRequest} StartInstanceRequest
                          */
-                        StartInstanceRequest.fromObject = function fromObject(object) {
+                        StartInstanceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.StartInstanceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.StartInstanceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -16894,7 +17586,7 @@
                             this.urls = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -17335,9 +18027,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Instance.decode = function decode(reader, length, error) {
+                        Instance.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Instance(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -17376,10 +18072,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -17399,27 +18097,29 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.annotations, key);
                                         message.annotations[key] = value;
                                         break;
                                     }
                                 case 8: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 11: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 12: {
@@ -17443,11 +18143,11 @@
                                         break;
                                     }
                                 case 17: {
-                                        message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.decode(reader, reader.uint32());
+                                        message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 18: {
-                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32());
+                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
@@ -17457,13 +18157,13 @@
                                 case 20: {
                                         if (!(message.containers && message.containers.length))
                                             message.containers = [];
-                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32()));
+                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 21: {
                                         if (!(message.volumes && message.volumes.length))
                                             message.volumes = [];
-                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32()));
+                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 22: {
@@ -17475,11 +18175,11 @@
                                         break;
                                     }
                                 case 25: {
-                                        message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 26: {
-                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32());
+                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 27: {
@@ -17507,19 +18207,19 @@
                                         break;
                                     }
                                 case 42: {
-                                        message.terminalCondition = $root.google.cloud.run.v2.Condition.decode(reader, reader.uint32());
+                                        message.terminalCondition = $root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 43: {
                                         if (!(message.conditions && message.conditions.length))
                                             message.conditions = [];
-                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32()));
+                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 44: {
                                         if (!(message.containerStatuses && message.containerStatuses.length))
                                             message.containerStatuses = [];
-                                        message.containerStatuses.push($root.google.cloud.run.v2.ContainerStatus.decode(reader, reader.uint32()));
+                                        message.containerStatuses.push($root.google.cloud.run.v2.ContainerStatus.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 46: {
@@ -17541,7 +18241,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -17572,9 +18272,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Instance.verify = function verify(message) {
+                        Instance.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
@@ -17605,22 +18309,22 @@
                                         return "annotations: string{k:string} expected";
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                 if (error)
                                     return "expireTime." + error;
                             }
@@ -17651,12 +18355,12 @@
                                     break;
                                 }
                             if (message.binaryAuthorization != null && message.hasOwnProperty("binaryAuthorization")) {
-                                var error = $root.google.cloud.run.v2.BinaryAuthorization.verify(message.binaryAuthorization);
+                                var error = $root.google.cloud.run.v2.BinaryAuthorization.verify(message.binaryAuthorization, long + 1);
                                 if (error)
                                     return "binaryAuthorization." + error;
                             }
                             if (message.vpcAccess != null && message.hasOwnProperty("vpcAccess")) {
-                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess);
+                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess, long + 1);
                                 if (error)
                                     return "vpcAccess." + error;
                             }
@@ -17667,7 +18371,7 @@
                                 if (!Array.isArray(message.containers))
                                     return "containers: array expected";
                                 for (var i = 0; i < message.containers.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i]);
+                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i], long + 1);
                                     if (error)
                                         return "containers." + error;
                                 }
@@ -17676,7 +18380,7 @@
                                 if (!Array.isArray(message.volumes))
                                     return "volumes: array expected";
                                 for (var i = 0; i < message.volumes.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i]);
+                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i], long + 1);
                                     if (error)
                                         return "volumes." + error;
                                 }
@@ -17694,12 +18398,12 @@
                                     break;
                                 }
                             if (message.encryptionKeyShutdownDuration != null && message.hasOwnProperty("encryptionKeyShutdownDuration")) {
-                                var error = $root.google.protobuf.Duration.verify(message.encryptionKeyShutdownDuration);
+                                var error = $root.google.protobuf.Duration.verify(message.encryptionKeyShutdownDuration, long + 1);
                                 if (error)
                                     return "encryptionKeyShutdownDuration." + error;
                             }
                             if (message.nodeSelector != null && message.hasOwnProperty("nodeSelector")) {
-                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector);
+                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector, long + 1);
                                 if (error)
                                     return "nodeSelector." + error;
                             }
@@ -17732,7 +18436,7 @@
                                 if (!$util.isString(message.logUri))
                                     return "logUri: string expected";
                             if (message.terminalCondition != null && message.hasOwnProperty("terminalCondition")) {
-                                var error = $root.google.cloud.run.v2.Condition.verify(message.terminalCondition);
+                                var error = $root.google.cloud.run.v2.Condition.verify(message.terminalCondition, long + 1);
                                 if (error)
                                     return "terminalCondition." + error;
                             }
@@ -17740,7 +18444,7 @@
                                 if (!Array.isArray(message.conditions))
                                     return "conditions: array expected";
                                 for (var i = 0; i < message.conditions.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i]);
+                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i], long + 1);
                                     if (error)
                                         return "conditions." + error;
                                 }
@@ -17749,7 +18453,7 @@
                                 if (!Array.isArray(message.containerStatuses))
                                     return "containerStatuses: array expected";
                                 for (var i = 0; i < message.containerStatuses.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.ContainerStatus.verify(message.containerStatuses[i]);
+                                    var error = $root.google.cloud.run.v2.ContainerStatus.verify(message.containerStatuses[i], long + 1);
                                     if (error)
                                         return "containerStatuses." + error;
                                 }
@@ -17781,9 +18485,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.Instance} Instance
                          */
-                        Instance.fromObject = function fromObject(object) {
+                        Instance.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.Instance)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.Instance();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -17804,35 +18512,41 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.annotations) {
                                 if (typeof object.annotations !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.annotations: object expected");
                                 message.annotations = {};
-                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.annotations, keys[i]);
                                     message.annotations[keys[i]] = String(object.annotations[keys[i]]);
+                                }
                             }
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             if (object.creator != null)
                                 message.creator = String(object.creator);
@@ -17885,12 +18599,12 @@
                             if (object.binaryAuthorization != null) {
                                 if (typeof object.binaryAuthorization !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.binaryAuthorization: object expected");
-                                message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.fromObject(object.binaryAuthorization);
+                                message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.fromObject(object.binaryAuthorization, long + 1);
                             }
                             if (object.vpcAccess != null) {
                                 if (typeof object.vpcAccess !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.vpcAccess: object expected");
-                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess);
+                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess, long + 1);
                             }
                             if (object.serviceAccount != null)
                                 message.serviceAccount = String(object.serviceAccount);
@@ -17901,7 +18615,7 @@
                                 for (var i = 0; i < object.containers.length; ++i) {
                                     if (typeof object.containers[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Instance.containers: object expected");
-                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i]);
+                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i], long + 1);
                                 }
                             }
                             if (object.volumes) {
@@ -17911,7 +18625,7 @@
                                 for (var i = 0; i < object.volumes.length; ++i) {
                                     if (typeof object.volumes[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Instance.volumes: object expected");
-                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i]);
+                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i], long + 1);
                                 }
                             }
                             if (object.encryptionKey != null)
@@ -17939,12 +18653,12 @@
                             if (object.encryptionKeyShutdownDuration != null) {
                                 if (typeof object.encryptionKeyShutdownDuration !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.encryptionKeyShutdownDuration: object expected");
-                                message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.fromObject(object.encryptionKeyShutdownDuration);
+                                message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.fromObject(object.encryptionKeyShutdownDuration, long + 1);
                             }
                             if (object.nodeSelector != null) {
                                 if (typeof object.nodeSelector !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.nodeSelector: object expected");
-                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector);
+                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector, long + 1);
                             }
                             if (object.gpuZonalRedundancyDisabled != null)
                                 message.gpuZonalRedundancyDisabled = Boolean(object.gpuZonalRedundancyDisabled);
@@ -17994,7 +18708,7 @@
                             if (object.terminalCondition != null) {
                                 if (typeof object.terminalCondition !== "object")
                                     throw TypeError(".google.cloud.run.v2.Instance.terminalCondition: object expected");
-                                message.terminalCondition = $root.google.cloud.run.v2.Condition.fromObject(object.terminalCondition);
+                                message.terminalCondition = $root.google.cloud.run.v2.Condition.fromObject(object.terminalCondition, long + 1);
                             }
                             if (object.conditions) {
                                 if (!Array.isArray(object.conditions))
@@ -18003,7 +18717,7 @@
                                 for (var i = 0; i < object.conditions.length; ++i) {
                                     if (typeof object.conditions[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Instance.conditions: object expected");
-                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i]);
+                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i], long + 1);
                                 }
                             }
                             if (object.containerStatuses) {
@@ -18013,7 +18727,7 @@
                                 for (var i = 0; i < object.containerStatuses.length; ++i) {
                                     if (typeof object.containerStatuses[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Instance.containerStatuses: object expected");
-                                    message.containerStatuses[i] = $root.google.cloud.run.v2.ContainerStatus.fromObject(object.containerStatuses[i]);
+                                    message.containerStatuses[i] = $root.google.cloud.run.v2.ContainerStatus.fromObject(object.containerStatuses[i], long + 1);
                                 }
                             }
                             if (object.satisfiesPzs != null)
@@ -18109,13 +18823,19 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.annotations && (keys2 = Object.keys(message.annotations)).length) {
                                 object.annotations = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.annotations, keys2[j]);
                                     object.annotations[keys2[j]] = message.annotations[keys2[j]];
+                                }
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime"))
                                 object.createTime = $root.google.protobuf.Timestamp.toObject(message.createTime, options);
@@ -18254,7 +18974,7 @@
                         function InstanceSplit(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -18339,9 +19059,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        InstanceSplit.decode = function decode(reader, length, error) {
+                        InstanceSplit.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.InstanceSplit();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -18361,7 +19085,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -18392,9 +19116,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        InstanceSplit.verify = function verify(message) {
+                        InstanceSplit.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.type != null && message.hasOwnProperty("type"))
                                 switch (message.type) {
                                 default:
@@ -18421,9 +19149,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.InstanceSplit} InstanceSplit
                          */
-                        InstanceSplit.fromObject = function fromObject(object) {
+                        InstanceSplit.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.InstanceSplit)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.InstanceSplit();
                             switch (object.type) {
                             default:
@@ -18530,7 +19262,7 @@
                         function InstanceSplitStatus(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -18615,9 +19347,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        InstanceSplitStatus.decode = function decode(reader, length, error) {
+                        InstanceSplitStatus.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.InstanceSplitStatus();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -18637,7 +19373,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -18668,9 +19404,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        InstanceSplitStatus.verify = function verify(message) {
+                        InstanceSplitStatus.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.type != null && message.hasOwnProperty("type"))
                                 switch (message.type) {
                                 default:
@@ -18697,9 +19437,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.InstanceSplitStatus} InstanceSplitStatus
                          */
-                        InstanceSplitStatus.fromObject = function fromObject(object) {
+                        InstanceSplitStatus.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.InstanceSplitStatus)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.InstanceSplitStatus();
                             switch (object.type) {
                             default:
@@ -19155,7 +19899,7 @@
                         function CreateJobRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -19250,9 +19994,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateJobRequest.decode = function decode(reader, length, error) {
+                        CreateJobRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.CreateJobRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -19264,7 +20012,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.job = $root.google.cloud.run.v2.Job.decode(reader, reader.uint32());
+                                        message.job = $root.google.cloud.run.v2.Job.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -19276,7 +20024,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -19307,14 +20055,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateJobRequest.verify = function verify(message) {
+                        CreateJobRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.job != null && message.hasOwnProperty("job")) {
-                                var error = $root.google.cloud.run.v2.Job.verify(message.job);
+                                var error = $root.google.cloud.run.v2.Job.verify(message.job, long + 1);
                                 if (error)
                                     return "job." + error;
                             }
@@ -19335,16 +20087,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.CreateJobRequest} CreateJobRequest
                          */
-                        CreateJobRequest.fromObject = function fromObject(object) {
+                        CreateJobRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.CreateJobRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.CreateJobRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.job != null) {
                                 if (typeof object.job !== "object")
                                     throw TypeError(".google.cloud.run.v2.CreateJobRequest.job: object expected");
-                                message.job = $root.google.cloud.run.v2.Job.fromObject(object.job);
+                                message.job = $root.google.cloud.run.v2.Job.fromObject(object.job, long + 1);
                             }
                             if (object.jobId != null)
                                 message.jobId = String(object.jobId);
@@ -19432,7 +20188,7 @@
                         function GetJobRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -19497,9 +20253,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetJobRequest.decode = function decode(reader, length, error) {
+                        GetJobRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.GetJobRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -19511,7 +20271,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -19542,9 +20302,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetJobRequest.verify = function verify(message) {
+                        GetJobRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -19559,9 +20323,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.GetJobRequest} GetJobRequest
                          */
-                        GetJobRequest.fromObject = function fromObject(object) {
+                        GetJobRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.GetJobRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.GetJobRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -19639,7 +20407,7 @@
                         function UpdateJobRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -19724,9 +20492,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateJobRequest.decode = function decode(reader, length, error) {
+                        UpdateJobRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.UpdateJobRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -19734,7 +20506,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.job = $root.google.cloud.run.v2.Job.decode(reader, reader.uint32());
+                                        message.job = $root.google.cloud.run.v2.Job.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -19746,7 +20518,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -19777,11 +20549,15 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateJobRequest.verify = function verify(message) {
+                        UpdateJobRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.job != null && message.hasOwnProperty("job")) {
-                                var error = $root.google.cloud.run.v2.Job.verify(message.job);
+                                var error = $root.google.cloud.run.v2.Job.verify(message.job, long + 1);
                                 if (error)
                                     return "job." + error;
                             }
@@ -19802,14 +20578,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.UpdateJobRequest} UpdateJobRequest
                          */
-                        UpdateJobRequest.fromObject = function fromObject(object) {
+                        UpdateJobRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.UpdateJobRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.UpdateJobRequest();
                             if (object.job != null) {
                                 if (typeof object.job !== "object")
                                     throw TypeError(".google.cloud.run.v2.UpdateJobRequest.job: object expected");
-                                message.job = $root.google.cloud.run.v2.Job.fromObject(object.job);
+                                message.job = $root.google.cloud.run.v2.Job.fromObject(object.job, long + 1);
                             }
                             if (object.validateOnly != null)
                                 message.validateOnly = Boolean(object.validateOnly);
@@ -19897,7 +20677,7 @@
                         function ListJobsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -19992,9 +20772,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListJobsRequest.decode = function decode(reader, length, error) {
+                        ListJobsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListJobsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -20018,7 +20802,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -20049,9 +20833,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListJobsRequest.verify = function verify(message) {
+                        ListJobsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -20075,9 +20863,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListJobsRequest} ListJobsRequest
                          */
-                        ListJobsRequest.fromObject = function fromObject(object) {
+                        ListJobsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListJobsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListJobsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -20171,7 +20963,7 @@
                             this.jobs = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -20247,9 +21039,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListJobsResponse.decode = function decode(reader, length, error) {
+                        ListJobsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListJobsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -20259,7 +21055,7 @@
                                 case 1: {
                                         if (!(message.jobs && message.jobs.length))
                                             message.jobs = [];
-                                        message.jobs.push($root.google.cloud.run.v2.Job.decode(reader, reader.uint32()));
+                                        message.jobs.push($root.google.cloud.run.v2.Job.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -20267,7 +21063,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -20298,14 +21094,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListJobsResponse.verify = function verify(message) {
+                        ListJobsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.jobs != null && message.hasOwnProperty("jobs")) {
                                 if (!Array.isArray(message.jobs))
                                     return "jobs: array expected";
                                 for (var i = 0; i < message.jobs.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Job.verify(message.jobs[i]);
+                                    var error = $root.google.cloud.run.v2.Job.verify(message.jobs[i], long + 1);
                                     if (error)
                                         return "jobs." + error;
                                 }
@@ -20324,9 +21124,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListJobsResponse} ListJobsResponse
                          */
-                        ListJobsResponse.fromObject = function fromObject(object) {
+                        ListJobsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListJobsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListJobsResponse();
                             if (object.jobs) {
                                 if (!Array.isArray(object.jobs))
@@ -20335,7 +21139,7 @@
                                 for (var i = 0; i < object.jobs.length; ++i) {
                                     if (typeof object.jobs[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.ListJobsResponse.jobs: object expected");
-                                    message.jobs[i] = $root.google.cloud.run.v2.Job.fromObject(object.jobs[i]);
+                                    message.jobs[i] = $root.google.cloud.run.v2.Job.fromObject(object.jobs[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -20421,7 +21225,7 @@
                         function DeleteJobRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -20506,9 +21310,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteJobRequest.decode = function decode(reader, length, error) {
+                        DeleteJobRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.DeleteJobRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -20528,7 +21336,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -20559,9 +21367,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteJobRequest.verify = function verify(message) {
+                        DeleteJobRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -20582,9 +21394,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.DeleteJobRequest} DeleteJobRequest
                          */
-                        DeleteJobRequest.fromObject = function fromObject(object) {
+                        DeleteJobRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.DeleteJobRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.DeleteJobRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -20674,7 +21490,7 @@
                         function RunJobRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -20769,9 +21585,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RunJobRequest.decode = function decode(reader, length, error) {
+                        RunJobRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.RunJobRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -20791,11 +21611,11 @@
                                         break;
                                     }
                                 case 4: {
-                                        message.overrides = $root.google.cloud.run.v2.RunJobRequest.Overrides.decode(reader, reader.uint32());
+                                        message.overrides = $root.google.cloud.run.v2.RunJobRequest.Overrides.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -20826,9 +21646,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RunJobRequest.verify = function verify(message) {
+                        RunJobRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -20839,7 +21663,7 @@
                                 if (!$util.isString(message.etag))
                                     return "etag: string expected";
                             if (message.overrides != null && message.hasOwnProperty("overrides")) {
-                                var error = $root.google.cloud.run.v2.RunJobRequest.Overrides.verify(message.overrides);
+                                var error = $root.google.cloud.run.v2.RunJobRequest.Overrides.verify(message.overrides, long + 1);
                                 if (error)
                                     return "overrides." + error;
                             }
@@ -20854,9 +21678,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.RunJobRequest} RunJobRequest
                          */
-                        RunJobRequest.fromObject = function fromObject(object) {
+                        RunJobRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.RunJobRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.RunJobRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -20867,7 +21695,7 @@
                             if (object.overrides != null) {
                                 if (typeof object.overrides !== "object")
                                     throw TypeError(".google.cloud.run.v2.RunJobRequest.overrides: object expected");
-                                message.overrides = $root.google.cloud.run.v2.RunJobRequest.Overrides.fromObject(object.overrides);
+                                message.overrides = $root.google.cloud.run.v2.RunJobRequest.Overrides.fromObject(object.overrides, long + 1);
                             }
                             return message;
                         };
@@ -20951,7 +21779,7 @@
                                 this.containerOverrides = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -21037,9 +21865,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            Overrides.decode = function decode(reader, length, error) {
+                            Overrides.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.RunJobRequest.Overrides();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -21049,7 +21881,7 @@
                                     case 1: {
                                             if (!(message.containerOverrides && message.containerOverrides.length))
                                                 message.containerOverrides = [];
-                                            message.containerOverrides.push($root.google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride.decode(reader, reader.uint32()));
+                                            message.containerOverrides.push($root.google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride.decode(reader, reader.uint32(), undefined, long + 1));
                                             break;
                                         }
                                     case 2: {
@@ -21057,11 +21889,11 @@
                                             break;
                                         }
                                     case 4: {
-                                            message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                            message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -21092,14 +21924,18 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            Overrides.verify = function verify(message) {
+                            Overrides.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.containerOverrides != null && message.hasOwnProperty("containerOverrides")) {
                                     if (!Array.isArray(message.containerOverrides))
                                         return "containerOverrides: array expected";
                                     for (var i = 0; i < message.containerOverrides.length; ++i) {
-                                        var error = $root.google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride.verify(message.containerOverrides[i]);
+                                        var error = $root.google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride.verify(message.containerOverrides[i], long + 1);
                                         if (error)
                                             return "containerOverrides." + error;
                                     }
@@ -21108,7 +21944,7 @@
                                     if (!$util.isInteger(message.taskCount))
                                         return "taskCount: integer expected";
                                 if (message.timeout != null && message.hasOwnProperty("timeout")) {
-                                    var error = $root.google.protobuf.Duration.verify(message.timeout);
+                                    var error = $root.google.protobuf.Duration.verify(message.timeout, long + 1);
                                     if (error)
                                         return "timeout." + error;
                                 }
@@ -21123,9 +21959,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.run.v2.RunJobRequest.Overrides} Overrides
                              */
-                            Overrides.fromObject = function fromObject(object) {
+                            Overrides.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.run.v2.RunJobRequest.Overrides)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.run.v2.RunJobRequest.Overrides();
                                 if (object.containerOverrides) {
                                     if (!Array.isArray(object.containerOverrides))
@@ -21134,7 +21974,7 @@
                                     for (var i = 0; i < object.containerOverrides.length; ++i) {
                                         if (typeof object.containerOverrides[i] !== "object")
                                             throw TypeError(".google.cloud.run.v2.RunJobRequest.Overrides.containerOverrides: object expected");
-                                        message.containerOverrides[i] = $root.google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride.fromObject(object.containerOverrides[i]);
+                                        message.containerOverrides[i] = $root.google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride.fromObject(object.containerOverrides[i], long + 1);
                                     }
                                 }
                                 if (object.taskCount != null)
@@ -21142,7 +21982,7 @@
                                 if (object.timeout != null) {
                                     if (typeof object.timeout !== "object")
                                         throw TypeError(".google.cloud.run.v2.RunJobRequest.Overrides.timeout: object expected");
-                                    message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout);
+                                    message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout, long + 1);
                                 }
                                 return message;
                             };
@@ -21229,7 +22069,7 @@
                                     this.env = [];
                                     if (properties)
                                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                            if (properties[keys[i]] != null)
+                                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                                 this[keys[i]] = properties[keys[i]];
                                 }
     
@@ -21326,9 +22166,13 @@
                                  * @throws {Error} If the payload is not a reader or valid buffer
                                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                                  */
-                                ContainerOverride.decode = function decode(reader, length, error) {
+                                ContainerOverride.decode = function decode(reader, length, error, long) {
                                     if (!(reader instanceof $Reader))
                                         reader = $Reader.create(reader);
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $Reader.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride();
                                     while (reader.pos < end) {
                                         var tag = reader.uint32();
@@ -21348,7 +22192,7 @@
                                         case 3: {
                                                 if (!(message.env && message.env.length))
                                                     message.env = [];
-                                                message.env.push($root.google.cloud.run.v2.EnvVar.decode(reader, reader.uint32()));
+                                                message.env.push($root.google.cloud.run.v2.EnvVar.decode(reader, reader.uint32(), undefined, long + 1));
                                                 break;
                                             }
                                         case 4: {
@@ -21356,7 +22200,7 @@
                                                 break;
                                             }
                                         default:
-                                            reader.skipType(tag & 7);
+                                            reader.skipType(tag & 7, long);
                                             break;
                                         }
                                     }
@@ -21387,9 +22231,13 @@
                                  * @param {Object.<string,*>} message Plain object to verify
                                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                                  */
-                                ContainerOverride.verify = function verify(message) {
+                                ContainerOverride.verify = function verify(message, long) {
                                     if (typeof message !== "object" || message === null)
                                         return "object expected";
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        return "maximum nesting depth exceeded";
                                     if (message.name != null && message.hasOwnProperty("name"))
                                         if (!$util.isString(message.name))
                                             return "name: string expected";
@@ -21404,7 +22252,7 @@
                                         if (!Array.isArray(message.env))
                                             return "env: array expected";
                                         for (var i = 0; i < message.env.length; ++i) {
-                                            var error = $root.google.cloud.run.v2.EnvVar.verify(message.env[i]);
+                                            var error = $root.google.cloud.run.v2.EnvVar.verify(message.env[i], long + 1);
                                             if (error)
                                                 return "env." + error;
                                         }
@@ -21423,9 +22271,13 @@
                                  * @param {Object.<string,*>} object Plain object
                                  * @returns {google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride} ContainerOverride
                                  */
-                                ContainerOverride.fromObject = function fromObject(object) {
+                                ContainerOverride.fromObject = function fromObject(object, long) {
                                     if (object instanceof $root.google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride)
                                         return object;
+                                    if (long === undefined)
+                                        long = 0;
+                                    if (long > $util.recursionLimit)
+                                        throw Error("maximum nesting depth exceeded");
                                     var message = new $root.google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride();
                                     if (object.name != null)
                                         message.name = String(object.name);
@@ -21443,7 +22295,7 @@
                                         for (var i = 0; i < object.env.length; ++i) {
                                             if (typeof object.env[i] !== "object")
                                                 throw TypeError(".google.cloud.run.v2.RunJobRequest.Overrides.ContainerOverride.env: object expected");
-                                            message.env[i] = $root.google.cloud.run.v2.EnvVar.fromObject(object.env[i]);
+                                            message.env[i] = $root.google.cloud.run.v2.EnvVar.fromObject(object.env[i], long + 1);
                                         }
                                     }
                                     if (object.clearArgs != null)
@@ -21572,7 +22424,7 @@
                             this.conditions = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -21904,9 +22756,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Job.decode = function decode(reader, length, error) {
+                        Job.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Job(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -21941,10 +22797,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -21964,27 +22822,29 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.annotations, key);
                                         message.annotations[key] = value;
                                         break;
                                     }
                                 case 6: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -22008,11 +22868,11 @@
                                         break;
                                     }
                                 case 15: {
-                                        message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.decode(reader, reader.uint32());
+                                        message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 16: {
-                                        message.template = $root.google.cloud.run.v2.ExecutionTemplate.decode(reader, reader.uint32());
+                                        message.template = $root.google.cloud.run.v2.ExecutionTemplate.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 17: {
@@ -22020,13 +22880,13 @@
                                         break;
                                     }
                                 case 18: {
-                                        message.terminalCondition = $root.google.cloud.run.v2.Condition.decode(reader, reader.uint32());
+                                        message.terminalCondition = $root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
                                         if (!(message.conditions && message.conditions.length))
                                             message.conditions = [];
-                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32()));
+                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 20: {
@@ -22034,7 +22894,7 @@
                                         break;
                                     }
                                 case 22: {
-                                        message.latestCreatedExecution = $root.google.cloud.run.v2.ExecutionReference.decode(reader, reader.uint32());
+                                        message.latestCreatedExecution = $root.google.cloud.run.v2.ExecutionReference.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 23: {
@@ -22058,7 +22918,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -22089,9 +22949,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Job.verify = function verify(message) {
+                        Job.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
@@ -22119,22 +22983,22 @@
                                         return "annotations: string{k:string} expected";
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                 if (error)
                                     return "expireTime." + error;
                             }
@@ -22165,12 +23029,12 @@
                                     break;
                                 }
                             if (message.binaryAuthorization != null && message.hasOwnProperty("binaryAuthorization")) {
-                                var error = $root.google.cloud.run.v2.BinaryAuthorization.verify(message.binaryAuthorization);
+                                var error = $root.google.cloud.run.v2.BinaryAuthorization.verify(message.binaryAuthorization, long + 1);
                                 if (error)
                                     return "binaryAuthorization." + error;
                             }
                             if (message.template != null && message.hasOwnProperty("template")) {
-                                var error = $root.google.cloud.run.v2.ExecutionTemplate.verify(message.template);
+                                var error = $root.google.cloud.run.v2.ExecutionTemplate.verify(message.template, long + 1);
                                 if (error)
                                     return "template." + error;
                             }
@@ -22178,7 +23042,7 @@
                                 if (!$util.isInteger(message.observedGeneration) && !(message.observedGeneration && $util.isInteger(message.observedGeneration.low) && $util.isInteger(message.observedGeneration.high)))
                                     return "observedGeneration: integer|Long expected";
                             if (message.terminalCondition != null && message.hasOwnProperty("terminalCondition")) {
-                                var error = $root.google.cloud.run.v2.Condition.verify(message.terminalCondition);
+                                var error = $root.google.cloud.run.v2.Condition.verify(message.terminalCondition, long + 1);
                                 if (error)
                                     return "terminalCondition." + error;
                             }
@@ -22186,7 +23050,7 @@
                                 if (!Array.isArray(message.conditions))
                                     return "conditions: array expected";
                                 for (var i = 0; i < message.conditions.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i]);
+                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i], long + 1);
                                     if (error)
                                         return "conditions." + error;
                                 }
@@ -22195,7 +23059,7 @@
                                 if (!$util.isInteger(message.executionCount))
                                     return "executionCount: integer expected";
                             if (message.latestCreatedExecution != null && message.hasOwnProperty("latestCreatedExecution")) {
-                                var error = $root.google.cloud.run.v2.ExecutionReference.verify(message.latestCreatedExecution);
+                                var error = $root.google.cloud.run.v2.ExecutionReference.verify(message.latestCreatedExecution, long + 1);
                                 if (error)
                                     return "latestCreatedExecution." + error;
                             }
@@ -22231,9 +23095,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.Job} Job
                          */
-                        Job.fromObject = function fromObject(object) {
+                        Job.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.Job)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.Job();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -22252,35 +23120,41 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.run.v2.Job.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.annotations) {
                                 if (typeof object.annotations !== "object")
                                     throw TypeError(".google.cloud.run.v2.Job.annotations: object expected");
                                 message.annotations = {};
-                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.annotations, keys[i]);
                                     message.annotations[keys[i]] = String(object.annotations[keys[i]]);
+                                }
                             }
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Job.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Job.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Job.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Job.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             if (object.creator != null)
                                 message.creator = String(object.creator);
@@ -22333,12 +23207,12 @@
                             if (object.binaryAuthorization != null) {
                                 if (typeof object.binaryAuthorization !== "object")
                                     throw TypeError(".google.cloud.run.v2.Job.binaryAuthorization: object expected");
-                                message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.fromObject(object.binaryAuthorization);
+                                message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.fromObject(object.binaryAuthorization, long + 1);
                             }
                             if (object.template != null) {
                                 if (typeof object.template !== "object")
                                     throw TypeError(".google.cloud.run.v2.Job.template: object expected");
-                                message.template = $root.google.cloud.run.v2.ExecutionTemplate.fromObject(object.template);
+                                message.template = $root.google.cloud.run.v2.ExecutionTemplate.fromObject(object.template, long + 1);
                             }
                             if (object.observedGeneration != null)
                                 if ($util.Long)
@@ -22352,7 +23226,7 @@
                             if (object.terminalCondition != null) {
                                 if (typeof object.terminalCondition !== "object")
                                     throw TypeError(".google.cloud.run.v2.Job.terminalCondition: object expected");
-                                message.terminalCondition = $root.google.cloud.run.v2.Condition.fromObject(object.terminalCondition);
+                                message.terminalCondition = $root.google.cloud.run.v2.Condition.fromObject(object.terminalCondition, long + 1);
                             }
                             if (object.conditions) {
                                 if (!Array.isArray(object.conditions))
@@ -22361,7 +23235,7 @@
                                 for (var i = 0; i < object.conditions.length; ++i) {
                                     if (typeof object.conditions[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Job.conditions: object expected");
-                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i]);
+                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i], long + 1);
                                 }
                             }
                             if (object.executionCount != null)
@@ -22369,7 +23243,7 @@
                             if (object.latestCreatedExecution != null) {
                                 if (typeof object.latestCreatedExecution !== "object")
                                     throw TypeError(".google.cloud.run.v2.Job.latestCreatedExecution: object expected");
-                                message.latestCreatedExecution = $root.google.cloud.run.v2.ExecutionReference.fromObject(object.latestCreatedExecution);
+                                message.latestCreatedExecution = $root.google.cloud.run.v2.ExecutionReference.fromObject(object.latestCreatedExecution, long + 1);
                             }
                             if (object.reconciling != null)
                                 message.reconciling = Boolean(object.reconciling);
@@ -22446,13 +23320,19 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.annotations && (keys2 = Object.keys(message.annotations)).length) {
                                 object.annotations = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.annotations, keys2[j]);
                                     object.annotations[keys2[j]] = message.annotations[keys2[j]];
+                                }
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime"))
                                 object.createTime = $root.google.protobuf.Timestamp.toObject(message.createTime, options);
@@ -22564,7 +23444,7 @@
                         function ExecutionReference(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -22669,9 +23549,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ExecutionReference.decode = function decode(reader, length, error) {
+                        ExecutionReference.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ExecutionReference();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -22683,15 +23567,15 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
-                                        message.completionTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.completionTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 4: {
@@ -22699,7 +23583,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -22730,24 +23614,28 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ExecutionReference.verify = function verify(message) {
+                        ExecutionReference.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.completionTime != null && message.hasOwnProperty("completionTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.completionTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.completionTime, long + 1);
                                 if (error)
                                     return "completionTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
@@ -22774,26 +23662,30 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ExecutionReference} ExecutionReference
                          */
-                        ExecutionReference.fromObject = function fromObject(object) {
+                        ExecutionReference.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ExecutionReference)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ExecutionReference();
                             if (object.name != null)
                                 message.name = String(object.name);
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.ExecutionReference.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.completionTime != null) {
                                 if (typeof object.completionTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.ExecutionReference.completionTime: object expected");
-                                message.completionTime = $root.google.protobuf.Timestamp.fromObject(object.completionTime);
+                                message.completionTime = $root.google.protobuf.Timestamp.fromObject(object.completionTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.ExecutionReference.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             switch (object.completionStatus) {
                             default:
@@ -23068,7 +23960,7 @@
                         function GetRevisionRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -23133,9 +24025,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetRevisionRequest.decode = function decode(reader, length, error) {
+                        GetRevisionRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.GetRevisionRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -23147,7 +24043,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -23178,9 +24074,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetRevisionRequest.verify = function verify(message) {
+                        GetRevisionRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -23195,9 +24095,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.GetRevisionRequest} GetRevisionRequest
                          */
-                        GetRevisionRequest.fromObject = function fromObject(object) {
+                        GetRevisionRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.GetRevisionRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.GetRevisionRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -23276,7 +24180,7 @@
                         function ListRevisionsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -23371,9 +24275,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListRevisionsRequest.decode = function decode(reader, length, error) {
+                        ListRevisionsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListRevisionsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -23397,7 +24305,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -23428,9 +24336,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListRevisionsRequest.verify = function verify(message) {
+                        ListRevisionsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -23454,9 +24366,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListRevisionsRequest} ListRevisionsRequest
                          */
-                        ListRevisionsRequest.fromObject = function fromObject(object) {
+                        ListRevisionsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListRevisionsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListRevisionsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -23550,7 +24466,7 @@
                             this.revisions = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -23626,9 +24542,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListRevisionsResponse.decode = function decode(reader, length, error) {
+                        ListRevisionsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListRevisionsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -23638,7 +24558,7 @@
                                 case 1: {
                                         if (!(message.revisions && message.revisions.length))
                                             message.revisions = [];
-                                        message.revisions.push($root.google.cloud.run.v2.Revision.decode(reader, reader.uint32()));
+                                        message.revisions.push($root.google.cloud.run.v2.Revision.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -23646,7 +24566,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -23677,14 +24597,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListRevisionsResponse.verify = function verify(message) {
+                        ListRevisionsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.revisions != null && message.hasOwnProperty("revisions")) {
                                 if (!Array.isArray(message.revisions))
                                     return "revisions: array expected";
                                 for (var i = 0; i < message.revisions.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Revision.verify(message.revisions[i]);
+                                    var error = $root.google.cloud.run.v2.Revision.verify(message.revisions[i], long + 1);
                                     if (error)
                                         return "revisions." + error;
                                 }
@@ -23703,9 +24627,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListRevisionsResponse} ListRevisionsResponse
                          */
-                        ListRevisionsResponse.fromObject = function fromObject(object) {
+                        ListRevisionsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListRevisionsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListRevisionsResponse();
                             if (object.revisions) {
                                 if (!Array.isArray(object.revisions))
@@ -23714,7 +24642,7 @@
                                 for (var i = 0; i < object.revisions.length; ++i) {
                                     if (typeof object.revisions[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.ListRevisionsResponse.revisions: object expected");
-                                    message.revisions[i] = $root.google.cloud.run.v2.Revision.fromObject(object.revisions[i]);
+                                    message.revisions[i] = $root.google.cloud.run.v2.Revision.fromObject(object.revisions[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -23800,7 +24728,7 @@
                         function DeleteRevisionRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -23885,9 +24813,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteRevisionRequest.decode = function decode(reader, length, error) {
+                        DeleteRevisionRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.DeleteRevisionRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -23907,7 +24839,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -23938,9 +24870,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteRevisionRequest.verify = function verify(message) {
+                        DeleteRevisionRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -23961,9 +24897,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.DeleteRevisionRequest} DeleteRevisionRequest
                          */
-                        DeleteRevisionRequest.fromObject = function fromObject(object) {
+                        DeleteRevisionRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.DeleteRevisionRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.DeleteRevisionRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -24088,7 +25028,7 @@
                             this.conditions = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -24497,9 +25437,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Revision.decode = function decode(reader, length, error) {
+                        Revision.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Revision(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -24534,10 +25478,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -24557,27 +25503,29 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.annotations, key);
                                         message.annotations[key] = value;
                                         break;
                                     }
                                 case 6: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -24589,11 +25537,11 @@
                                         break;
                                     }
                                 case 12: {
-                                        message.scaling = $root.google.cloud.run.v2.RevisionScaling.decode(reader, reader.uint32());
+                                        message.scaling = $root.google.cloud.run.v2.RevisionScaling.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
-                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32());
+                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 34: {
@@ -24601,7 +25549,7 @@
                                         break;
                                     }
                                 case 15: {
-                                        message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 16: {
@@ -24611,13 +25559,13 @@
                                 case 17: {
                                         if (!(message.containers && message.containers.length))
                                             message.containers = [];
-                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32()));
+                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 18: {
                                         if (!(message.volumes && message.volumes.length))
                                             message.volumes = [];
-                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32()));
+                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 20: {
@@ -24629,7 +25577,7 @@
                                         break;
                                     }
                                 case 22: {
-                                        message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.decode(reader, reader.uint32());
+                                        message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 23: {
@@ -24637,7 +25585,7 @@
                                         break;
                                     }
                                 case 24: {
-                                        message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 30: {
@@ -24647,7 +25595,7 @@
                                 case 31: {
                                         if (!(message.conditions && message.conditions.length))
                                             message.conditions = [];
-                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32()));
+                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 32: {
@@ -24667,11 +25615,11 @@
                                         break;
                                     }
                                 case 39: {
-                                        message.scalingStatus = $root.google.cloud.run.v2.RevisionScalingStatus.decode(reader, reader.uint32());
+                                        message.scalingStatus = $root.google.cloud.run.v2.RevisionScalingStatus.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 40: {
-                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32());
+                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 48: {
@@ -24687,7 +25635,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -24718,9 +25666,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Revision.verify = function verify(message) {
+                        Revision.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
@@ -24748,22 +25700,22 @@
                                         return "annotations: string{k:string} expected";
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                 if (error)
                                     return "expireTime." + error;
                             }
@@ -24785,12 +25737,12 @@
                                 if (!$util.isString(message.service))
                                     return "service: string expected";
                             if (message.scaling != null && message.hasOwnProperty("scaling")) {
-                                var error = $root.google.cloud.run.v2.RevisionScaling.verify(message.scaling);
+                                var error = $root.google.cloud.run.v2.RevisionScaling.verify(message.scaling, long + 1);
                                 if (error)
                                     return "scaling." + error;
                             }
                             if (message.vpcAccess != null && message.hasOwnProperty("vpcAccess")) {
-                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess);
+                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess, long + 1);
                                 if (error)
                                     return "vpcAccess." + error;
                             }
@@ -24798,7 +25750,7 @@
                                 if (!$util.isInteger(message.maxInstanceRequestConcurrency))
                                     return "maxInstanceRequestConcurrency: integer expected";
                             if (message.timeout != null && message.hasOwnProperty("timeout")) {
-                                var error = $root.google.protobuf.Duration.verify(message.timeout);
+                                var error = $root.google.protobuf.Duration.verify(message.timeout, long + 1);
                                 if (error)
                                     return "timeout." + error;
                             }
@@ -24809,7 +25761,7 @@
                                 if (!Array.isArray(message.containers))
                                     return "containers: array expected";
                                 for (var i = 0; i < message.containers.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i]);
+                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i], long + 1);
                                     if (error)
                                         return "containers." + error;
                                 }
@@ -24818,7 +25770,7 @@
                                 if (!Array.isArray(message.volumes))
                                     return "volumes: array expected";
                                 for (var i = 0; i < message.volumes.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i]);
+                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i], long + 1);
                                     if (error)
                                         return "volumes." + error;
                                 }
@@ -24836,7 +25788,7 @@
                                 if (!$util.isString(message.encryptionKey))
                                     return "encryptionKey: string expected";
                             if (message.serviceMesh != null && message.hasOwnProperty("serviceMesh")) {
-                                var error = $root.google.cloud.run.v2.ServiceMesh.verify(message.serviceMesh);
+                                var error = $root.google.cloud.run.v2.ServiceMesh.verify(message.serviceMesh, long + 1);
                                 if (error)
                                     return "serviceMesh." + error;
                             }
@@ -24850,7 +25802,7 @@
                                     break;
                                 }
                             if (message.encryptionKeyShutdownDuration != null && message.hasOwnProperty("encryptionKeyShutdownDuration")) {
-                                var error = $root.google.protobuf.Duration.verify(message.encryptionKeyShutdownDuration);
+                                var error = $root.google.protobuf.Duration.verify(message.encryptionKeyShutdownDuration, long + 1);
                                 if (error)
                                     return "encryptionKeyShutdownDuration." + error;
                             }
@@ -24861,7 +25813,7 @@
                                 if (!Array.isArray(message.conditions))
                                     return "conditions: array expected";
                                 for (var i = 0; i < message.conditions.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i]);
+                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i], long + 1);
                                     if (error)
                                         return "conditions." + error;
                                 }
@@ -24879,12 +25831,12 @@
                                 if (typeof message.sessionAffinity !== "boolean")
                                     return "sessionAffinity: boolean expected";
                             if (message.scalingStatus != null && message.hasOwnProperty("scalingStatus")) {
-                                var error = $root.google.cloud.run.v2.RevisionScalingStatus.verify(message.scalingStatus);
+                                var error = $root.google.cloud.run.v2.RevisionScalingStatus.verify(message.scalingStatus, long + 1);
                                 if (error)
                                     return "scalingStatus." + error;
                             }
                             if (message.nodeSelector != null && message.hasOwnProperty("nodeSelector")) {
-                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector);
+                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector, long + 1);
                                 if (error)
                                     return "nodeSelector." + error;
                             }
@@ -24910,9 +25862,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.Revision} Revision
                          */
-                        Revision.fromObject = function fromObject(object) {
+                        Revision.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.Revision)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.Revision();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -24931,35 +25887,41 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.annotations) {
                                 if (typeof object.annotations !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.annotations: object expected");
                                 message.annotations = {};
-                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.annotations, keys[i]);
                                     message.annotations[keys[i]] = String(object.annotations[keys[i]]);
+                                }
                             }
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             switch (object.launchStage) {
                             default:
@@ -25006,19 +25968,19 @@
                             if (object.scaling != null) {
                                 if (typeof object.scaling !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.scaling: object expected");
-                                message.scaling = $root.google.cloud.run.v2.RevisionScaling.fromObject(object.scaling);
+                                message.scaling = $root.google.cloud.run.v2.RevisionScaling.fromObject(object.scaling, long + 1);
                             }
                             if (object.vpcAccess != null) {
                                 if (typeof object.vpcAccess !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.vpcAccess: object expected");
-                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess);
+                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess, long + 1);
                             }
                             if (object.maxInstanceRequestConcurrency != null)
                                 message.maxInstanceRequestConcurrency = object.maxInstanceRequestConcurrency | 0;
                             if (object.timeout != null) {
                                 if (typeof object.timeout !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.timeout: object expected");
-                                message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout);
+                                message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout, long + 1);
                             }
                             if (object.serviceAccount != null)
                                 message.serviceAccount = String(object.serviceAccount);
@@ -25029,7 +25991,7 @@
                                 for (var i = 0; i < object.containers.length; ++i) {
                                     if (typeof object.containers[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Revision.containers: object expected");
-                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i]);
+                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i], long + 1);
                                 }
                             }
                             if (object.volumes) {
@@ -25039,7 +26001,7 @@
                                 for (var i = 0; i < object.volumes.length; ++i) {
                                     if (typeof object.volumes[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Revision.volumes: object expected");
-                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i]);
+                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i], long + 1);
                                 }
                             }
                             switch (object.executionEnvironment) {
@@ -25067,7 +26029,7 @@
                             if (object.serviceMesh != null) {
                                 if (typeof object.serviceMesh !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.serviceMesh: object expected");
-                                message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.fromObject(object.serviceMesh);
+                                message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.fromObject(object.serviceMesh, long + 1);
                             }
                             switch (object.encryptionKeyRevocationAction) {
                             default:
@@ -25092,7 +26054,7 @@
                             if (object.encryptionKeyShutdownDuration != null) {
                                 if (typeof object.encryptionKeyShutdownDuration !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.encryptionKeyShutdownDuration: object expected");
-                                message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.fromObject(object.encryptionKeyShutdownDuration);
+                                message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.fromObject(object.encryptionKeyShutdownDuration, long + 1);
                             }
                             if (object.reconciling != null)
                                 message.reconciling = Boolean(object.reconciling);
@@ -25103,7 +26065,7 @@
                                 for (var i = 0; i < object.conditions.length; ++i) {
                                     if (typeof object.conditions[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Revision.conditions: object expected");
-                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i]);
+                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i], long + 1);
                                 }
                             }
                             if (object.observedGeneration != null)
@@ -25124,12 +26086,12 @@
                             if (object.scalingStatus != null) {
                                 if (typeof object.scalingStatus !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.scalingStatus: object expected");
-                                message.scalingStatus = $root.google.cloud.run.v2.RevisionScalingStatus.fromObject(object.scalingStatus);
+                                message.scalingStatus = $root.google.cloud.run.v2.RevisionScalingStatus.fromObject(object.scalingStatus, long + 1);
                             }
                             if (object.nodeSelector != null) {
                                 if (typeof object.nodeSelector !== "object")
                                     throw TypeError(".google.cloud.run.v2.Revision.nodeSelector: object expected");
-                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector);
+                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector, long + 1);
                             }
                             if (object.gpuZonalRedundancyDisabled != null)
                                 message.gpuZonalRedundancyDisabled = Boolean(object.gpuZonalRedundancyDisabled);
@@ -25212,13 +26174,19 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.annotations && (keys2 = Object.keys(message.annotations)).length) {
                                 object.annotations = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.annotations, keys2[j]);
                                     object.annotations[keys2[j]] = message.annotations[keys2[j]];
+                                }
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime"))
                                 object.createTime = $root.google.protobuf.Timestamp.toObject(message.createTime, options);
@@ -25345,7 +26313,7 @@
                         function RevisionScalingStatus(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -25410,9 +26378,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RevisionScalingStatus.decode = function decode(reader, length, error) {
+                        RevisionScalingStatus.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.RevisionScalingStatus();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -25424,7 +26396,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -25455,9 +26427,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RevisionScalingStatus.verify = function verify(message) {
+                        RevisionScalingStatus.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.desiredMinInstanceCount != null && message.hasOwnProperty("desiredMinInstanceCount"))
                                 if (!$util.isInteger(message.desiredMinInstanceCount))
                                     return "desiredMinInstanceCount: integer expected";
@@ -25472,9 +26448,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.RevisionScalingStatus} RevisionScalingStatus
                          */
-                        RevisionScalingStatus.fromObject = function fromObject(object) {
+                        RevisionScalingStatus.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.RevisionScalingStatus)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.RevisionScalingStatus();
                             if (object.desiredMinInstanceCount != null)
                                 message.desiredMinInstanceCount = object.desiredMinInstanceCount | 0;
@@ -25572,7 +26552,7 @@
                             this.volumes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -25830,9 +26810,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        RevisionTemplate.decode = function decode(reader, length, error) {
+                        RevisionTemplate.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.RevisionTemplate(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -25859,10 +26843,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -25882,23 +26868,25 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.annotations, key);
                                         message.annotations[key] = value;
                                         break;
                                     }
                                 case 4: {
-                                        message.scaling = $root.google.cloud.run.v2.RevisionScaling.decode(reader, reader.uint32());
+                                        message.scaling = $root.google.cloud.run.v2.RevisionScaling.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 6: {
-                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32());
+                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
@@ -25908,13 +26896,13 @@
                                 case 10: {
                                         if (!(message.containers && message.containers.length))
                                             message.containers = [];
-                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32()));
+                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 11: {
                                         if (!(message.volumes && message.volumes.length))
                                             message.volumes = [];
-                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32()));
+                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 13: {
@@ -25930,7 +26918,7 @@
                                         break;
                                     }
                                 case 16: {
-                                        message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.decode(reader, reader.uint32());
+                                        message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 17: {
@@ -25938,7 +26926,7 @@
                                         break;
                                     }
                                 case 18: {
-                                        message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
@@ -25950,7 +26938,7 @@
                                         break;
                                     }
                                 case 21: {
-                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32());
+                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 24: {
@@ -25958,7 +26946,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -25989,9 +26977,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        RevisionTemplate.verify = function verify(message) {
+                        RevisionTemplate.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.revision != null && message.hasOwnProperty("revision"))
                                 if (!$util.isString(message.revision))
@@ -26013,17 +27005,17 @@
                                         return "annotations: string{k:string} expected";
                             }
                             if (message.scaling != null && message.hasOwnProperty("scaling")) {
-                                var error = $root.google.cloud.run.v2.RevisionScaling.verify(message.scaling);
+                                var error = $root.google.cloud.run.v2.RevisionScaling.verify(message.scaling, long + 1);
                                 if (error)
                                     return "scaling." + error;
                             }
                             if (message.vpcAccess != null && message.hasOwnProperty("vpcAccess")) {
-                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess);
+                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess, long + 1);
                                 if (error)
                                     return "vpcAccess." + error;
                             }
                             if (message.timeout != null && message.hasOwnProperty("timeout")) {
-                                var error = $root.google.protobuf.Duration.verify(message.timeout);
+                                var error = $root.google.protobuf.Duration.verify(message.timeout, long + 1);
                                 if (error)
                                     return "timeout." + error;
                             }
@@ -26034,7 +27026,7 @@
                                 if (!Array.isArray(message.containers))
                                     return "containers: array expected";
                                 for (var i = 0; i < message.containers.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i]);
+                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i], long + 1);
                                     if (error)
                                         return "containers." + error;
                                 }
@@ -26043,7 +27035,7 @@
                                 if (!Array.isArray(message.volumes))
                                     return "volumes: array expected";
                                 for (var i = 0; i < message.volumes.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i]);
+                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i], long + 1);
                                     if (error)
                                         return "volumes." + error;
                                 }
@@ -26064,7 +27056,7 @@
                                 if (!$util.isInteger(message.maxInstanceRequestConcurrency))
                                     return "maxInstanceRequestConcurrency: integer expected";
                             if (message.serviceMesh != null && message.hasOwnProperty("serviceMesh")) {
-                                var error = $root.google.cloud.run.v2.ServiceMesh.verify(message.serviceMesh);
+                                var error = $root.google.cloud.run.v2.ServiceMesh.verify(message.serviceMesh, long + 1);
                                 if (error)
                                     return "serviceMesh." + error;
                             }
@@ -26078,7 +27070,7 @@
                                     break;
                                 }
                             if (message.encryptionKeyShutdownDuration != null && message.hasOwnProperty("encryptionKeyShutdownDuration")) {
-                                var error = $root.google.protobuf.Duration.verify(message.encryptionKeyShutdownDuration);
+                                var error = $root.google.protobuf.Duration.verify(message.encryptionKeyShutdownDuration, long + 1);
                                 if (error)
                                     return "encryptionKeyShutdownDuration." + error;
                             }
@@ -26089,7 +27081,7 @@
                                 if (typeof message.healthCheckDisabled !== "boolean")
                                     return "healthCheckDisabled: boolean expected";
                             if (message.nodeSelector != null && message.hasOwnProperty("nodeSelector")) {
-                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector);
+                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector, long + 1);
                                 if (error)
                                     return "nodeSelector." + error;
                             }
@@ -26109,9 +27101,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.RevisionTemplate} RevisionTemplate
                          */
-                        RevisionTemplate.fromObject = function fromObject(object) {
+                        RevisionTemplate.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.RevisionTemplate)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.RevisionTemplate();
                             if (object.revision != null)
                                 message.revision = String(object.revision);
@@ -26119,30 +27115,36 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.run.v2.RevisionTemplate.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.annotations) {
                                 if (typeof object.annotations !== "object")
                                     throw TypeError(".google.cloud.run.v2.RevisionTemplate.annotations: object expected");
                                 message.annotations = {};
-                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.annotations, keys[i]);
                                     message.annotations[keys[i]] = String(object.annotations[keys[i]]);
+                                }
                             }
                             if (object.scaling != null) {
                                 if (typeof object.scaling !== "object")
                                     throw TypeError(".google.cloud.run.v2.RevisionTemplate.scaling: object expected");
-                                message.scaling = $root.google.cloud.run.v2.RevisionScaling.fromObject(object.scaling);
+                                message.scaling = $root.google.cloud.run.v2.RevisionScaling.fromObject(object.scaling, long + 1);
                             }
                             if (object.vpcAccess != null) {
                                 if (typeof object.vpcAccess !== "object")
                                     throw TypeError(".google.cloud.run.v2.RevisionTemplate.vpcAccess: object expected");
-                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess);
+                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess, long + 1);
                             }
                             if (object.timeout != null) {
                                 if (typeof object.timeout !== "object")
                                     throw TypeError(".google.cloud.run.v2.RevisionTemplate.timeout: object expected");
-                                message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout);
+                                message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout, long + 1);
                             }
                             if (object.serviceAccount != null)
                                 message.serviceAccount = String(object.serviceAccount);
@@ -26153,7 +27155,7 @@
                                 for (var i = 0; i < object.containers.length; ++i) {
                                     if (typeof object.containers[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.RevisionTemplate.containers: object expected");
-                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i]);
+                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i], long + 1);
                                 }
                             }
                             if (object.volumes) {
@@ -26163,7 +27165,7 @@
                                 for (var i = 0; i < object.volumes.length; ++i) {
                                     if (typeof object.volumes[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.RevisionTemplate.volumes: object expected");
-                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i]);
+                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i], long + 1);
                                 }
                             }
                             switch (object.executionEnvironment) {
@@ -26193,7 +27195,7 @@
                             if (object.serviceMesh != null) {
                                 if (typeof object.serviceMesh !== "object")
                                     throw TypeError(".google.cloud.run.v2.RevisionTemplate.serviceMesh: object expected");
-                                message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.fromObject(object.serviceMesh);
+                                message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.fromObject(object.serviceMesh, long + 1);
                             }
                             switch (object.encryptionKeyRevocationAction) {
                             default:
@@ -26218,7 +27220,7 @@
                             if (object.encryptionKeyShutdownDuration != null) {
                                 if (typeof object.encryptionKeyShutdownDuration !== "object")
                                     throw TypeError(".google.cloud.run.v2.RevisionTemplate.encryptionKeyShutdownDuration: object expected");
-                                message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.fromObject(object.encryptionKeyShutdownDuration);
+                                message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.fromObject(object.encryptionKeyShutdownDuration, long + 1);
                             }
                             if (object.sessionAffinity != null)
                                 message.sessionAffinity = Boolean(object.sessionAffinity);
@@ -26227,7 +27229,7 @@
                             if (object.nodeSelector != null) {
                                 if (typeof object.nodeSelector !== "object")
                                     throw TypeError(".google.cloud.run.v2.RevisionTemplate.nodeSelector: object expected");
-                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector);
+                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector, long + 1);
                             }
                             if (object.gpuZonalRedundancyDisabled != null)
                                 message.gpuZonalRedundancyDisabled = Boolean(object.gpuZonalRedundancyDisabled);
@@ -26276,13 +27278,19 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.annotations && (keys2 = Object.keys(message.annotations)).length) {
                                 object.annotations = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.annotations, keys2[j]);
                                     object.annotations[keys2[j]] = message.annotations[keys2[j]];
+                                }
                             }
                             if (message.scaling != null && message.hasOwnProperty("scaling"))
                                 object.scaling = $root.google.cloud.run.v2.RevisionScaling.toObject(message.scaling, options);
@@ -26679,7 +27687,7 @@
                         function CreateServiceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -26774,9 +27782,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateServiceRequest.decode = function decode(reader, length, error) {
+                        CreateServiceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.CreateServiceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -26788,7 +27800,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.service = $root.google.cloud.run.v2.Service.decode(reader, reader.uint32());
+                                        message.service = $root.google.cloud.run.v2.Service.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -26800,7 +27812,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -26831,14 +27843,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateServiceRequest.verify = function verify(message) {
+                        CreateServiceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.service != null && message.hasOwnProperty("service")) {
-                                var error = $root.google.cloud.run.v2.Service.verify(message.service);
+                                var error = $root.google.cloud.run.v2.Service.verify(message.service, long + 1);
                                 if (error)
                                     return "service." + error;
                             }
@@ -26859,16 +27875,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.CreateServiceRequest} CreateServiceRequest
                          */
-                        CreateServiceRequest.fromObject = function fromObject(object) {
+                        CreateServiceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.CreateServiceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.CreateServiceRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.service != null) {
                                 if (typeof object.service !== "object")
                                     throw TypeError(".google.cloud.run.v2.CreateServiceRequest.service: object expected");
-                                message.service = $root.google.cloud.run.v2.Service.fromObject(object.service);
+                                message.service = $root.google.cloud.run.v2.Service.fromObject(object.service, long + 1);
                             }
                             if (object.serviceId != null)
                                 message.serviceId = String(object.serviceId);
@@ -26959,7 +27979,7 @@
                         function UpdateServiceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -27054,9 +28074,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateServiceRequest.decode = function decode(reader, length, error) {
+                        UpdateServiceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.UpdateServiceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -27064,11 +28088,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
-                                        message.service = $root.google.cloud.run.v2.Service.decode(reader, reader.uint32());
+                                        message.service = $root.google.cloud.run.v2.Service.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -27080,7 +28104,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -27111,16 +28135,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateServiceRequest.verify = function verify(message) {
+                        UpdateServiceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
                             if (message.service != null && message.hasOwnProperty("service")) {
-                                var error = $root.google.cloud.run.v2.Service.verify(message.service);
+                                var error = $root.google.cloud.run.v2.Service.verify(message.service, long + 1);
                                 if (error)
                                     return "service." + error;
                             }
@@ -27141,19 +28169,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.UpdateServiceRequest} UpdateServiceRequest
                          */
-                        UpdateServiceRequest.fromObject = function fromObject(object) {
+                        UpdateServiceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.UpdateServiceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.UpdateServiceRequest();
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.run.v2.UpdateServiceRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             if (object.service != null) {
                                 if (typeof object.service !== "object")
                                     throw TypeError(".google.cloud.run.v2.UpdateServiceRequest.service: object expected");
-                                message.service = $root.google.cloud.run.v2.Service.fromObject(object.service);
+                                message.service = $root.google.cloud.run.v2.Service.fromObject(object.service, long + 1);
                             }
                             if (object.validateOnly != null)
                                 message.validateOnly = Boolean(object.validateOnly);
@@ -27244,7 +28276,7 @@
                         function ListServicesRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -27339,9 +28371,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListServicesRequest.decode = function decode(reader, length, error) {
+                        ListServicesRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListServicesRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -27365,7 +28401,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -27396,9 +28432,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListServicesRequest.verify = function verify(message) {
+                        ListServicesRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -27422,9 +28462,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListServicesRequest} ListServicesRequest
                          */
-                        ListServicesRequest.fromObject = function fromObject(object) {
+                        ListServicesRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListServicesRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListServicesRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -27520,7 +28564,7 @@
                             this.unreachable = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -27607,9 +28651,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListServicesResponse.decode = function decode(reader, length, error) {
+                        ListServicesResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListServicesResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -27619,7 +28667,7 @@
                                 case 1: {
                                         if (!(message.services && message.services.length))
                                             message.services = [];
-                                        message.services.push($root.google.cloud.run.v2.Service.decode(reader, reader.uint32()));
+                                        message.services.push($root.google.cloud.run.v2.Service.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -27633,7 +28681,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -27664,14 +28712,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListServicesResponse.verify = function verify(message) {
+                        ListServicesResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.services != null && message.hasOwnProperty("services")) {
                                 if (!Array.isArray(message.services))
                                     return "services: array expected";
                                 for (var i = 0; i < message.services.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Service.verify(message.services[i]);
+                                    var error = $root.google.cloud.run.v2.Service.verify(message.services[i], long + 1);
                                     if (error)
                                         return "services." + error;
                                 }
@@ -27697,9 +28749,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListServicesResponse} ListServicesResponse
                          */
-                        ListServicesResponse.fromObject = function fromObject(object) {
+                        ListServicesResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListServicesResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListServicesResponse();
                             if (object.services) {
                                 if (!Array.isArray(object.services))
@@ -27708,7 +28764,7 @@
                                 for (var i = 0; i < object.services.length; ++i) {
                                     if (typeof object.services[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.ListServicesResponse.services: object expected");
-                                    message.services[i] = $root.google.cloud.run.v2.Service.fromObject(object.services[i]);
+                                    message.services[i] = $root.google.cloud.run.v2.Service.fromObject(object.services[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -27806,7 +28862,7 @@
                         function GetServiceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -27871,9 +28927,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetServiceRequest.decode = function decode(reader, length, error) {
+                        GetServiceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.GetServiceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -27885,7 +28945,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -27916,9 +28976,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetServiceRequest.verify = function verify(message) {
+                        GetServiceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -27933,9 +28997,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.GetServiceRequest} GetServiceRequest
                          */
-                        GetServiceRequest.fromObject = function fromObject(object) {
+                        GetServiceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.GetServiceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.GetServiceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -28013,7 +29081,7 @@
                         function DeleteServiceRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -28098,9 +29166,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteServiceRequest.decode = function decode(reader, length, error) {
+                        DeleteServiceRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.DeleteServiceRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -28120,7 +29192,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -28151,9 +29223,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteServiceRequest.verify = function verify(message) {
+                        DeleteServiceRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -28174,9 +29250,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.DeleteServiceRequest} DeleteServiceRequest
                          */
-                        DeleteServiceRequest.fromObject = function fromObject(object) {
+                        DeleteServiceRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.DeleteServiceRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.DeleteServiceRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -28307,7 +29387,7 @@
                             this.trafficStatuses = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -28749,9 +29829,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Service.decode = function decode(reader, length, error) {
+                        Service.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Service(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -28790,10 +29874,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -28813,27 +29899,29 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.annotations, key);
                                         message.annotations[key] = value;
                                         break;
                                     }
                                 case 7: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 11: {
@@ -28861,21 +29949,21 @@
                                         break;
                                     }
                                 case 17: {
-                                        message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.decode(reader, reader.uint32());
+                                        message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 18: {
-                                        message.template = $root.google.cloud.run.v2.RevisionTemplate.decode(reader, reader.uint32());
+                                        message.template = $root.google.cloud.run.v2.RevisionTemplate.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 19: {
                                         if (!(message.traffic && message.traffic.length))
                                             message.traffic = [];
-                                        message.traffic.push($root.google.cloud.run.v2.TrafficTarget.decode(reader, reader.uint32()));
+                                        message.traffic.push($root.google.cloud.run.v2.TrafficTarget.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 20: {
-                                        message.scaling = $root.google.cloud.run.v2.ServiceScaling.decode(reader, reader.uint32());
+                                        message.scaling = $root.google.cloud.run.v2.ServiceScaling.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 21: {
@@ -28897,7 +29985,7 @@
                                         break;
                                     }
                                 case 26: {
-                                        message.multiRegionSettings = $root.google.cloud.run.v2.Service.MultiRegionSettings.decode(reader, reader.uint32());
+                                        message.multiRegionSettings = $root.google.cloud.run.v2.Service.MultiRegionSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 37: {
@@ -28911,13 +29999,13 @@
                                         break;
                                     }
                                 case 31: {
-                                        message.terminalCondition = $root.google.cloud.run.v2.Condition.decode(reader, reader.uint32());
+                                        message.terminalCondition = $root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 32: {
                                         if (!(message.conditions && message.conditions.length))
                                             message.conditions = [];
-                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32()));
+                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 33: {
@@ -28931,7 +30019,7 @@
                                 case 35: {
                                         if (!(message.trafficStatuses && message.trafficStatuses.length))
                                             message.trafficStatuses = [];
-                                        message.trafficStatuses.push($root.google.cloud.run.v2.TrafficTargetStatus.decode(reader, reader.uint32()));
+                                        message.trafficStatuses.push($root.google.cloud.run.v2.TrafficTargetStatus.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 36: {
@@ -28947,7 +30035,7 @@
                                         break;
                                     }
                                 case 41: {
-                                        message.buildConfig = $root.google.cloud.run.v2.BuildConfig.decode(reader, reader.uint32());
+                                        message.buildConfig = $root.google.cloud.run.v2.BuildConfig.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 98: {
@@ -28959,7 +30047,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -28990,9 +30078,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Service.verify = function verify(message) {
+                        Service.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -29022,22 +30114,22 @@
                                         return "annotations: string{k:string} expected";
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                 if (error)
                                     return "expireTime." + error;
                             }
@@ -29079,12 +30171,12 @@
                                     break;
                                 }
                             if (message.binaryAuthorization != null && message.hasOwnProperty("binaryAuthorization")) {
-                                var error = $root.google.cloud.run.v2.BinaryAuthorization.verify(message.binaryAuthorization);
+                                var error = $root.google.cloud.run.v2.BinaryAuthorization.verify(message.binaryAuthorization, long + 1);
                                 if (error)
                                     return "binaryAuthorization." + error;
                             }
                             if (message.template != null && message.hasOwnProperty("template")) {
-                                var error = $root.google.cloud.run.v2.RevisionTemplate.verify(message.template);
+                                var error = $root.google.cloud.run.v2.RevisionTemplate.verify(message.template, long + 1);
                                 if (error)
                                     return "template." + error;
                             }
@@ -29092,13 +30184,13 @@
                                 if (!Array.isArray(message.traffic))
                                     return "traffic: array expected";
                                 for (var i = 0; i < message.traffic.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.TrafficTarget.verify(message.traffic[i]);
+                                    var error = $root.google.cloud.run.v2.TrafficTarget.verify(message.traffic[i], long + 1);
                                     if (error)
                                         return "traffic." + error;
                                 }
                             }
                             if (message.scaling != null && message.hasOwnProperty("scaling")) {
-                                var error = $root.google.cloud.run.v2.ServiceScaling.verify(message.scaling);
+                                var error = $root.google.cloud.run.v2.ServiceScaling.verify(message.scaling, long + 1);
                                 if (error)
                                     return "scaling." + error;
                             }
@@ -29119,7 +30211,7 @@
                                 if (typeof message.iapEnabled !== "boolean")
                                     return "iapEnabled: boolean expected";
                             if (message.multiRegionSettings != null && message.hasOwnProperty("multiRegionSettings")) {
-                                var error = $root.google.cloud.run.v2.Service.MultiRegionSettings.verify(message.multiRegionSettings);
+                                var error = $root.google.cloud.run.v2.Service.MultiRegionSettings.verify(message.multiRegionSettings, long + 1);
                                 if (error)
                                     return "multiRegionSettings." + error;
                             }
@@ -29134,7 +30226,7 @@
                                 if (!$util.isInteger(message.observedGeneration) && !(message.observedGeneration && $util.isInteger(message.observedGeneration.low) && $util.isInteger(message.observedGeneration.high)))
                                     return "observedGeneration: integer|Long expected";
                             if (message.terminalCondition != null && message.hasOwnProperty("terminalCondition")) {
-                                var error = $root.google.cloud.run.v2.Condition.verify(message.terminalCondition);
+                                var error = $root.google.cloud.run.v2.Condition.verify(message.terminalCondition, long + 1);
                                 if (error)
                                     return "terminalCondition." + error;
                             }
@@ -29142,7 +30234,7 @@
                                 if (!Array.isArray(message.conditions))
                                     return "conditions: array expected";
                                 for (var i = 0; i < message.conditions.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i]);
+                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i], long + 1);
                                     if (error)
                                         return "conditions." + error;
                                 }
@@ -29157,7 +30249,7 @@
                                 if (!Array.isArray(message.trafficStatuses))
                                     return "trafficStatuses: array expected";
                                 for (var i = 0; i < message.trafficStatuses.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.TrafficTargetStatus.verify(message.trafficStatuses[i]);
+                                    var error = $root.google.cloud.run.v2.TrafficTargetStatus.verify(message.trafficStatuses[i], long + 1);
                                     if (error)
                                         return "trafficStatuses." + error;
                                 }
@@ -29172,7 +30264,7 @@
                                 if (typeof message.threatDetectionEnabled !== "boolean")
                                     return "threatDetectionEnabled: boolean expected";
                             if (message.buildConfig != null && message.hasOwnProperty("buildConfig")) {
-                                var error = $root.google.cloud.run.v2.BuildConfig.verify(message.buildConfig);
+                                var error = $root.google.cloud.run.v2.BuildConfig.verify(message.buildConfig, long + 1);
                                 if (error)
                                     return "buildConfig." + error;
                             }
@@ -29193,9 +30285,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.Service} Service
                          */
-                        Service.fromObject = function fromObject(object) {
+                        Service.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.Service)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.Service();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -29216,35 +30312,41 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.annotations) {
                                 if (typeof object.annotations !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.annotations: object expected");
                                 message.annotations = {};
-                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.annotations, keys[i]);
                                     message.annotations[keys[i]] = String(object.annotations[keys[i]]);
+                                }
                             }
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             if (object.creator != null)
                                 message.creator = String(object.creator);
@@ -29325,12 +30427,12 @@
                             if (object.binaryAuthorization != null) {
                                 if (typeof object.binaryAuthorization !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.binaryAuthorization: object expected");
-                                message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.fromObject(object.binaryAuthorization);
+                                message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.fromObject(object.binaryAuthorization, long + 1);
                             }
                             if (object.template != null) {
                                 if (typeof object.template !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.template: object expected");
-                                message.template = $root.google.cloud.run.v2.RevisionTemplate.fromObject(object.template);
+                                message.template = $root.google.cloud.run.v2.RevisionTemplate.fromObject(object.template, long + 1);
                             }
                             if (object.traffic) {
                                 if (!Array.isArray(object.traffic))
@@ -29339,13 +30441,13 @@
                                 for (var i = 0; i < object.traffic.length; ++i) {
                                     if (typeof object.traffic[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Service.traffic: object expected");
-                                    message.traffic[i] = $root.google.cloud.run.v2.TrafficTarget.fromObject(object.traffic[i]);
+                                    message.traffic[i] = $root.google.cloud.run.v2.TrafficTarget.fromObject(object.traffic[i], long + 1);
                                 }
                             }
                             if (object.scaling != null) {
                                 if (typeof object.scaling !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.scaling: object expected");
-                                message.scaling = $root.google.cloud.run.v2.ServiceScaling.fromObject(object.scaling);
+                                message.scaling = $root.google.cloud.run.v2.ServiceScaling.fromObject(object.scaling, long + 1);
                             }
                             if (object.invokerIamDisabled != null)
                                 message.invokerIamDisabled = Boolean(object.invokerIamDisabled);
@@ -29363,7 +30465,7 @@
                             if (object.multiRegionSettings != null) {
                                 if (typeof object.multiRegionSettings !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.multiRegionSettings: object expected");
-                                message.multiRegionSettings = $root.google.cloud.run.v2.Service.MultiRegionSettings.fromObject(object.multiRegionSettings);
+                                message.multiRegionSettings = $root.google.cloud.run.v2.Service.MultiRegionSettings.fromObject(object.multiRegionSettings, long + 1);
                             }
                             if (object.customAudiences) {
                                 if (!Array.isArray(object.customAudiences))
@@ -29384,7 +30486,7 @@
                             if (object.terminalCondition != null) {
                                 if (typeof object.terminalCondition !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.terminalCondition: object expected");
-                                message.terminalCondition = $root.google.cloud.run.v2.Condition.fromObject(object.terminalCondition);
+                                message.terminalCondition = $root.google.cloud.run.v2.Condition.fromObject(object.terminalCondition, long + 1);
                             }
                             if (object.conditions) {
                                 if (!Array.isArray(object.conditions))
@@ -29393,7 +30495,7 @@
                                 for (var i = 0; i < object.conditions.length; ++i) {
                                     if (typeof object.conditions[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Service.conditions: object expected");
-                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i]);
+                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i], long + 1);
                                 }
                             }
                             if (object.latestReadyRevision != null)
@@ -29407,7 +30509,7 @@
                                 for (var i = 0; i < object.trafficStatuses.length; ++i) {
                                     if (typeof object.trafficStatuses[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Service.trafficStatuses: object expected");
-                                    message.trafficStatuses[i] = $root.google.cloud.run.v2.TrafficTargetStatus.fromObject(object.trafficStatuses[i]);
+                                    message.trafficStatuses[i] = $root.google.cloud.run.v2.TrafficTargetStatus.fromObject(object.trafficStatuses[i], long + 1);
                                 }
                             }
                             if (object.uri != null)
@@ -29419,7 +30521,7 @@
                             if (object.buildConfig != null) {
                                 if (typeof object.buildConfig !== "object")
                                     throw TypeError(".google.cloud.run.v2.Service.buildConfig: object expected");
-                                message.buildConfig = $root.google.cloud.run.v2.BuildConfig.fromObject(object.buildConfig);
+                                message.buildConfig = $root.google.cloud.run.v2.BuildConfig.fromObject(object.buildConfig, long + 1);
                             }
                             if (object.reconciling != null)
                                 message.reconciling = Boolean(object.reconciling);
@@ -29507,13 +30609,19 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.annotations && (keys2 = Object.keys(message.annotations)).length) {
                                 object.annotations = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.annotations, keys2[j]);
                                     object.annotations[keys2[j]] = message.annotations[keys2[j]];
+                                }
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime"))
                                 object.createTime = $root.google.protobuf.Timestamp.toObject(message.createTime, options);
@@ -29648,7 +30756,7 @@
                                 this.regions = [];
                                 if (properties)
                                     for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                        if (properties[keys[i]] != null)
+                                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                             this[keys[i]] = properties[keys[i]];
                             }
     
@@ -29724,9 +30832,13 @@
                              * @throws {Error} If the payload is not a reader or valid buffer
                              * @throws {$protobuf.util.ProtocolError} If required fields are missing
                              */
-                            MultiRegionSettings.decode = function decode(reader, length, error) {
+                            MultiRegionSettings.decode = function decode(reader, length, error, long) {
                                 if (!(reader instanceof $Reader))
                                     reader = $Reader.create(reader);
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $Reader.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Service.MultiRegionSettings();
                                 while (reader.pos < end) {
                                     var tag = reader.uint32();
@@ -29744,7 +30856,7 @@
                                             break;
                                         }
                                     default:
-                                        reader.skipType(tag & 7);
+                                        reader.skipType(tag & 7, long);
                                         break;
                                     }
                                 }
@@ -29775,9 +30887,13 @@
                              * @param {Object.<string,*>} message Plain object to verify
                              * @returns {string|null} `null` if valid, otherwise the reason why it is not
                              */
-                            MultiRegionSettings.verify = function verify(message) {
+                            MultiRegionSettings.verify = function verify(message, long) {
                                 if (typeof message !== "object" || message === null)
                                     return "object expected";
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    return "maximum nesting depth exceeded";
                                 if (message.regions != null && message.hasOwnProperty("regions")) {
                                     if (!Array.isArray(message.regions))
                                         return "regions: array expected";
@@ -29799,9 +30915,13 @@
                              * @param {Object.<string,*>} object Plain object
                              * @returns {google.cloud.run.v2.Service.MultiRegionSettings} MultiRegionSettings
                              */
-                            MultiRegionSettings.fromObject = function fromObject(object) {
+                            MultiRegionSettings.fromObject = function fromObject(object, long) {
                                 if (object instanceof $root.google.cloud.run.v2.Service.MultiRegionSettings)
                                     return object;
+                                if (long === undefined)
+                                    long = 0;
+                                if (long > $util.recursionLimit)
+                                    throw Error("maximum nesting depth exceeded");
                                 var message = new $root.google.cloud.run.v2.Service.MultiRegionSettings();
                                 if (object.regions) {
                                     if (!Array.isArray(object.regions))
@@ -29897,7 +31017,7 @@
                         function TrafficTarget(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -29992,9 +31112,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TrafficTarget.decode = function decode(reader, length, error) {
+                        TrafficTarget.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.TrafficTarget();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -30018,7 +31142,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -30049,9 +31173,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TrafficTarget.verify = function verify(message) {
+                        TrafficTarget.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.type != null && message.hasOwnProperty("type"))
                                 switch (message.type) {
                                 default:
@@ -30081,9 +31209,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.TrafficTarget} TrafficTarget
                          */
-                        TrafficTarget.fromObject = function fromObject(object) {
+                        TrafficTarget.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.TrafficTarget)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.TrafficTarget();
                             switch (object.type) {
                             default:
@@ -30197,7 +31329,7 @@
                         function TrafficTargetStatus(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -30302,9 +31434,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TrafficTargetStatus.decode = function decode(reader, length, error) {
+                        TrafficTargetStatus.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.TrafficTargetStatus();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -30332,7 +31468,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -30363,9 +31499,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TrafficTargetStatus.verify = function verify(message) {
+                        TrafficTargetStatus.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.type != null && message.hasOwnProperty("type"))
                                 switch (message.type) {
                                 default:
@@ -30398,9 +31538,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.TrafficTargetStatus} TrafficTargetStatus
                          */
-                        TrafficTargetStatus.fromObject = function fromObject(object) {
+                        TrafficTargetStatus.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.TrafficTargetStatus)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.TrafficTargetStatus();
                             switch (object.type) {
                             default:
@@ -30632,7 +31776,7 @@
                         function GetTaskRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -30697,9 +31841,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetTaskRequest.decode = function decode(reader, length, error) {
+                        GetTaskRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.GetTaskRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -30711,7 +31859,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -30742,9 +31890,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetTaskRequest.verify = function verify(message) {
+                        GetTaskRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -30759,9 +31911,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.GetTaskRequest} GetTaskRequest
                          */
-                        GetTaskRequest.fromObject = function fromObject(object) {
+                        GetTaskRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.GetTaskRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.GetTaskRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -30840,7 +31996,7 @@
                         function ListTasksRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -30935,9 +32091,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListTasksRequest.decode = function decode(reader, length, error) {
+                        ListTasksRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListTasksRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -30961,7 +32121,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -30992,9 +32152,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListTasksRequest.verify = function verify(message) {
+                        ListTasksRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -31018,9 +32182,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListTasksRequest} ListTasksRequest
                          */
-                        ListTasksRequest.fromObject = function fromObject(object) {
+                        ListTasksRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListTasksRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListTasksRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -31114,7 +32282,7 @@
                             this.tasks = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -31190,9 +32358,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListTasksResponse.decode = function decode(reader, length, error) {
+                        ListTasksResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListTasksResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -31202,7 +32374,7 @@
                                 case 1: {
                                         if (!(message.tasks && message.tasks.length))
                                             message.tasks = [];
-                                        message.tasks.push($root.google.cloud.run.v2.Task.decode(reader, reader.uint32()));
+                                        message.tasks.push($root.google.cloud.run.v2.Task.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -31210,7 +32382,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -31241,14 +32413,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListTasksResponse.verify = function verify(message) {
+                        ListTasksResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.tasks != null && message.hasOwnProperty("tasks")) {
                                 if (!Array.isArray(message.tasks))
                                     return "tasks: array expected";
                                 for (var i = 0; i < message.tasks.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Task.verify(message.tasks[i]);
+                                    var error = $root.google.cloud.run.v2.Task.verify(message.tasks[i], long + 1);
                                     if (error)
                                         return "tasks." + error;
                                 }
@@ -31267,9 +32443,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListTasksResponse} ListTasksResponse
                          */
-                        ListTasksResponse.fromObject = function fromObject(object) {
+                        ListTasksResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListTasksResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListTasksResponse();
                             if (object.tasks) {
                                 if (!Array.isArray(object.tasks))
@@ -31278,7 +32458,7 @@
                                 for (var i = 0; i < object.tasks.length; ++i) {
                                     if (typeof object.tasks[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.ListTasksResponse.tasks: object expected");
-                                    message.tasks[i] = $root.google.cloud.run.v2.Task.fromObject(object.tasks[i]);
+                                    message.tasks[i] = $root.google.cloud.run.v2.Task.fromObject(object.tasks[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -31399,7 +32579,7 @@
                             this.conditions = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -31798,9 +32978,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        Task.decode = function decode(reader, length, error) {
+                        Task.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.Task(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -31835,10 +33019,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -31858,39 +33044,41 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.annotations, key);
                                         message.annotations[key] = value;
                                         break;
                                     }
                                 case 6: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 34: {
-                                        message.scheduledTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.scheduledTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 27: {
-                                        message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 7: {
-                                        message.completionTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.completionTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 12: {
@@ -31904,13 +33092,13 @@
                                 case 14: {
                                         if (!(message.containers && message.containers.length))
                                             message.containers = [];
-                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32()));
+                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 15: {
                                         if (!(message.volumes && message.volumes.length))
                                             message.volumes = [];
-                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32()));
+                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 16: {
@@ -31918,7 +33106,7 @@
                                         break;
                                     }
                                 case 17: {
-                                        message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 18: {
@@ -31936,7 +33124,7 @@
                                 case 22: {
                                         if (!(message.conditions && message.conditions.length))
                                             message.conditions = [];
-                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32()));
+                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 23: {
@@ -31952,7 +33140,7 @@
                                         break;
                                     }
                                 case 26: {
-                                        message.lastAttemptResult = $root.google.cloud.run.v2.TaskAttemptResult.decode(reader, reader.uint32());
+                                        message.lastAttemptResult = $root.google.cloud.run.v2.TaskAttemptResult.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 28: {
@@ -31960,7 +33148,7 @@
                                         break;
                                     }
                                 case 29: {
-                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32());
+                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 32: {
@@ -31972,7 +33160,7 @@
                                         break;
                                     }
                                 case 36: {
-                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32());
+                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 37: {
@@ -31984,7 +33172,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -32015,9 +33203,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        Task.verify = function verify(message) {
+                        Task.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
@@ -32045,37 +33237,37 @@
                                         return "annotations: string{k:string} expected";
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.scheduledTime != null && message.hasOwnProperty("scheduledTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.scheduledTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.scheduledTime, long + 1);
                                 if (error)
                                     return "scheduledTime." + error;
                             }
                             if (message.startTime != null && message.hasOwnProperty("startTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.startTime, long + 1);
                                 if (error)
                                     return "startTime." + error;
                             }
                             if (message.completionTime != null && message.hasOwnProperty("completionTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.completionTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.completionTime, long + 1);
                                 if (error)
                                     return "completionTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                 if (error)
                                     return "expireTime." + error;
                             }
@@ -32089,7 +33281,7 @@
                                 if (!Array.isArray(message.containers))
                                     return "containers: array expected";
                                 for (var i = 0; i < message.containers.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i]);
+                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i], long + 1);
                                     if (error)
                                         return "containers." + error;
                                 }
@@ -32098,7 +33290,7 @@
                                 if (!Array.isArray(message.volumes))
                                     return "volumes: array expected";
                                 for (var i = 0; i < message.volumes.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i]);
+                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i], long + 1);
                                     if (error)
                                         return "volumes." + error;
                                 }
@@ -32107,7 +33299,7 @@
                                 if (!$util.isInteger(message.maxRetries))
                                     return "maxRetries: integer expected";
                             if (message.timeout != null && message.hasOwnProperty("timeout")) {
-                                var error = $root.google.protobuf.Duration.verify(message.timeout);
+                                var error = $root.google.protobuf.Duration.verify(message.timeout, long + 1);
                                 if (error)
                                     return "timeout." + error;
                             }
@@ -32130,7 +33322,7 @@
                                 if (!Array.isArray(message.conditions))
                                     return "conditions: array expected";
                                 for (var i = 0; i < message.conditions.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i]);
+                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i], long + 1);
                                     if (error)
                                         return "conditions." + error;
                                 }
@@ -32145,7 +33337,7 @@
                                 if (!$util.isInteger(message.retried))
                                     return "retried: integer expected";
                             if (message.lastAttemptResult != null && message.hasOwnProperty("lastAttemptResult")) {
-                                var error = $root.google.cloud.run.v2.TaskAttemptResult.verify(message.lastAttemptResult);
+                                var error = $root.google.cloud.run.v2.TaskAttemptResult.verify(message.lastAttemptResult, long + 1);
                                 if (error)
                                     return "lastAttemptResult." + error;
                             }
@@ -32153,7 +33345,7 @@
                                 if (!$util.isString(message.encryptionKey))
                                     return "encryptionKey: string expected";
                             if (message.vpcAccess != null && message.hasOwnProperty("vpcAccess")) {
-                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess);
+                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess, long + 1);
                                 if (error)
                                     return "vpcAccess." + error;
                             }
@@ -32164,7 +33356,7 @@
                                 if (typeof message.satisfiesPzs !== "boolean")
                                     return "satisfiesPzs: boolean expected";
                             if (message.nodeSelector != null && message.hasOwnProperty("nodeSelector")) {
-                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector);
+                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector, long + 1);
                                 if (error)
                                     return "nodeSelector." + error;
                             }
@@ -32187,9 +33379,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.Task} Task
                          */
-                        Task.fromObject = function fromObject(object) {
+                        Task.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.Task)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.Task();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -32208,50 +33404,56 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.annotations) {
                                 if (typeof object.annotations !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.annotations: object expected");
                                 message.annotations = {};
-                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.annotations, keys[i]);
                                     message.annotations[keys[i]] = String(object.annotations[keys[i]]);
+                                }
                             }
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.scheduledTime != null) {
                                 if (typeof object.scheduledTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.scheduledTime: object expected");
-                                message.scheduledTime = $root.google.protobuf.Timestamp.fromObject(object.scheduledTime);
+                                message.scheduledTime = $root.google.protobuf.Timestamp.fromObject(object.scheduledTime, long + 1);
                             }
                             if (object.startTime != null) {
                                 if (typeof object.startTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.startTime: object expected");
-                                message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime, long + 1);
                             }
                             if (object.completionTime != null) {
                                 if (typeof object.completionTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.completionTime: object expected");
-                                message.completionTime = $root.google.protobuf.Timestamp.fromObject(object.completionTime);
+                                message.completionTime = $root.google.protobuf.Timestamp.fromObject(object.completionTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             if (object.job != null)
                                 message.job = String(object.job);
@@ -32264,7 +33466,7 @@
                                 for (var i = 0; i < object.containers.length; ++i) {
                                     if (typeof object.containers[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Task.containers: object expected");
-                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i]);
+                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i], long + 1);
                                 }
                             }
                             if (object.volumes) {
@@ -32274,7 +33476,7 @@
                                 for (var i = 0; i < object.volumes.length; ++i) {
                                     if (typeof object.volumes[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Task.volumes: object expected");
-                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i]);
+                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i], long + 1);
                                 }
                             }
                             if (object.maxRetries != null)
@@ -32282,7 +33484,7 @@
                             if (object.timeout != null) {
                                 if (typeof object.timeout !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.timeout: object expected");
-                                message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout);
+                                message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout, long + 1);
                             }
                             if (object.serviceAccount != null)
                                 message.serviceAccount = String(object.serviceAccount);
@@ -32315,7 +33517,7 @@
                                 for (var i = 0; i < object.conditions.length; ++i) {
                                     if (typeof object.conditions[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.Task.conditions: object expected");
-                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i]);
+                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i], long + 1);
                                 }
                             }
                             if (object.observedGeneration != null)
@@ -32334,14 +33536,14 @@
                             if (object.lastAttemptResult != null) {
                                 if (typeof object.lastAttemptResult !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.lastAttemptResult: object expected");
-                                message.lastAttemptResult = $root.google.cloud.run.v2.TaskAttemptResult.fromObject(object.lastAttemptResult);
+                                message.lastAttemptResult = $root.google.cloud.run.v2.TaskAttemptResult.fromObject(object.lastAttemptResult, long + 1);
                             }
                             if (object.encryptionKey != null)
                                 message.encryptionKey = String(object.encryptionKey);
                             if (object.vpcAccess != null) {
                                 if (typeof object.vpcAccess !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.vpcAccess: object expected");
-                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess);
+                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess, long + 1);
                             }
                             if (object.logUri != null)
                                 message.logUri = String(object.logUri);
@@ -32350,7 +33552,7 @@
                             if (object.nodeSelector != null) {
                                 if (typeof object.nodeSelector !== "object")
                                     throw TypeError(".google.cloud.run.v2.Task.nodeSelector: object expected");
-                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector);
+                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector, long + 1);
                             }
                             if (object.gpuZonalRedundancyDisabled != null)
                                 message.gpuZonalRedundancyDisabled = Boolean(object.gpuZonalRedundancyDisabled);
@@ -32430,13 +33632,19 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.annotations && (keys2 = Object.keys(message.annotations)).length) {
                                 object.annotations = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.annotations, keys2[j]);
                                     object.annotations[keys2[j]] = message.annotations[keys2[j]];
+                                }
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime"))
                                 object.createTime = $root.google.protobuf.Timestamp.toObject(message.createTime, options);
@@ -32563,7 +33771,7 @@
                         function TaskAttemptResult(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -32648,9 +33856,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        TaskAttemptResult.decode = function decode(reader, length, error) {
+                        TaskAttemptResult.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.TaskAttemptResult();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -32658,7 +33870,7 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 1: {
-                                        message.status = $root.google.rpc.Status.decode(reader, reader.uint32());
+                                        message.status = $root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 2: {
@@ -32670,7 +33882,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -32701,11 +33913,15 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        TaskAttemptResult.verify = function verify(message) {
+                        TaskAttemptResult.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.status != null && message.hasOwnProperty("status")) {
-                                var error = $root.google.rpc.Status.verify(message.status);
+                                var error = $root.google.rpc.Status.verify(message.status, long + 1);
                                 if (error)
                                     return "status." + error;
                             }
@@ -32726,14 +33942,18 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.TaskAttemptResult} TaskAttemptResult
                          */
-                        TaskAttemptResult.fromObject = function fromObject(object) {
+                        TaskAttemptResult.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.TaskAttemptResult)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.TaskAttemptResult();
                             if (object.status != null) {
                                 if (typeof object.status !== "object")
                                     throw TypeError(".google.cloud.run.v2.TaskAttemptResult.status: object expected");
-                                message.status = $root.google.rpc.Status.fromObject(object.status);
+                                message.status = $root.google.rpc.Status.fromObject(object.status, long + 1);
                             }
                             if (object.exitCode != null)
                                 message.exitCode = object.exitCode | 0;
@@ -33120,7 +34340,7 @@
                         function CreateWorkerPoolRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -33215,9 +34435,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        CreateWorkerPoolRequest.decode = function decode(reader, length, error) {
+                        CreateWorkerPoolRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.CreateWorkerPoolRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -33229,7 +34453,7 @@
                                         break;
                                     }
                                 case 2: {
-                                        message.workerPool = $root.google.cloud.run.v2.WorkerPool.decode(reader, reader.uint32());
+                                        message.workerPool = $root.google.cloud.run.v2.WorkerPool.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -33241,7 +34465,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -33272,14 +34496,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        CreateWorkerPoolRequest.verify = function verify(message) {
+                        CreateWorkerPoolRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
                             if (message.workerPool != null && message.hasOwnProperty("workerPool")) {
-                                var error = $root.google.cloud.run.v2.WorkerPool.verify(message.workerPool);
+                                var error = $root.google.cloud.run.v2.WorkerPool.verify(message.workerPool, long + 1);
                                 if (error)
                                     return "workerPool." + error;
                             }
@@ -33300,16 +34528,20 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.CreateWorkerPoolRequest} CreateWorkerPoolRequest
                          */
-                        CreateWorkerPoolRequest.fromObject = function fromObject(object) {
+                        CreateWorkerPoolRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.CreateWorkerPoolRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.CreateWorkerPoolRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
                             if (object.workerPool != null) {
                                 if (typeof object.workerPool !== "object")
                                     throw TypeError(".google.cloud.run.v2.CreateWorkerPoolRequest.workerPool: object expected");
-                                message.workerPool = $root.google.cloud.run.v2.WorkerPool.fromObject(object.workerPool);
+                                message.workerPool = $root.google.cloud.run.v2.WorkerPool.fromObject(object.workerPool, long + 1);
                             }
                             if (object.workerPoolId != null)
                                 message.workerPoolId = String(object.workerPoolId);
@@ -33401,7 +34633,7 @@
                         function UpdateWorkerPoolRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -33506,9 +34738,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        UpdateWorkerPoolRequest.decode = function decode(reader, length, error) {
+                        UpdateWorkerPoolRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.UpdateWorkerPoolRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -33516,11 +34752,11 @@
                                     break;
                                 switch (tag >>> 3) {
                                 case 2: {
-                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                        message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 1: {
-                                        message.workerPool = $root.google.cloud.run.v2.WorkerPool.decode(reader, reader.uint32());
+                                        message.workerPool = $root.google.cloud.run.v2.WorkerPool.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 3: {
@@ -33536,7 +34772,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -33567,16 +34803,20 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        UpdateWorkerPoolRequest.verify = function verify(message) {
+                        UpdateWorkerPoolRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                                var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                                 if (error)
                                     return "updateMask." + error;
                             }
                             if (message.workerPool != null && message.hasOwnProperty("workerPool")) {
-                                var error = $root.google.cloud.run.v2.WorkerPool.verify(message.workerPool);
+                                var error = $root.google.cloud.run.v2.WorkerPool.verify(message.workerPool, long + 1);
                                 if (error)
                                     return "workerPool." + error;
                             }
@@ -33600,19 +34840,23 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.UpdateWorkerPoolRequest} UpdateWorkerPoolRequest
                          */
-                        UpdateWorkerPoolRequest.fromObject = function fromObject(object) {
+                        UpdateWorkerPoolRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.UpdateWorkerPoolRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.UpdateWorkerPoolRequest();
                             if (object.updateMask != null) {
                                 if (typeof object.updateMask !== "object")
                                     throw TypeError(".google.cloud.run.v2.UpdateWorkerPoolRequest.updateMask: object expected");
-                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                                message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                             }
                             if (object.workerPool != null) {
                                 if (typeof object.workerPool !== "object")
                                     throw TypeError(".google.cloud.run.v2.UpdateWorkerPoolRequest.workerPool: object expected");
-                                message.workerPool = $root.google.cloud.run.v2.WorkerPool.fromObject(object.workerPool);
+                                message.workerPool = $root.google.cloud.run.v2.WorkerPool.fromObject(object.workerPool, long + 1);
                             }
                             if (object.validateOnly != null)
                                 message.validateOnly = Boolean(object.validateOnly);
@@ -33708,7 +34952,7 @@
                         function ListWorkerPoolsRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -33803,9 +35047,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListWorkerPoolsRequest.decode = function decode(reader, length, error) {
+                        ListWorkerPoolsRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListWorkerPoolsRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -33829,7 +35077,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -33860,9 +35108,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListWorkerPoolsRequest.verify = function verify(message) {
+                        ListWorkerPoolsRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.parent != null && message.hasOwnProperty("parent"))
                                 if (!$util.isString(message.parent))
                                     return "parent: string expected";
@@ -33886,9 +35138,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListWorkerPoolsRequest} ListWorkerPoolsRequest
                          */
-                        ListWorkerPoolsRequest.fromObject = function fromObject(object) {
+                        ListWorkerPoolsRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListWorkerPoolsRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListWorkerPoolsRequest();
                             if (object.parent != null)
                                 message.parent = String(object.parent);
@@ -33982,7 +35238,7 @@
                             this.workerPools = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -34058,9 +35314,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        ListWorkerPoolsResponse.decode = function decode(reader, length, error) {
+                        ListWorkerPoolsResponse.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.ListWorkerPoolsResponse();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -34070,7 +35330,7 @@
                                 case 1: {
                                         if (!(message.workerPools && message.workerPools.length))
                                             message.workerPools = [];
-                                        message.workerPools.push($root.google.cloud.run.v2.WorkerPool.decode(reader, reader.uint32()));
+                                        message.workerPools.push($root.google.cloud.run.v2.WorkerPool.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 2: {
@@ -34078,7 +35338,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -34109,14 +35369,18 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        ListWorkerPoolsResponse.verify = function verify(message) {
+                        ListWorkerPoolsResponse.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.workerPools != null && message.hasOwnProperty("workerPools")) {
                                 if (!Array.isArray(message.workerPools))
                                     return "workerPools: array expected";
                                 for (var i = 0; i < message.workerPools.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.WorkerPool.verify(message.workerPools[i]);
+                                    var error = $root.google.cloud.run.v2.WorkerPool.verify(message.workerPools[i], long + 1);
                                     if (error)
                                         return "workerPools." + error;
                                 }
@@ -34135,9 +35399,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.ListWorkerPoolsResponse} ListWorkerPoolsResponse
                          */
-                        ListWorkerPoolsResponse.fromObject = function fromObject(object) {
+                        ListWorkerPoolsResponse.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.ListWorkerPoolsResponse)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.ListWorkerPoolsResponse();
                             if (object.workerPools) {
                                 if (!Array.isArray(object.workerPools))
@@ -34146,7 +35414,7 @@
                                 for (var i = 0; i < object.workerPools.length; ++i) {
                                     if (typeof object.workerPools[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.ListWorkerPoolsResponse.workerPools: object expected");
-                                    message.workerPools[i] = $root.google.cloud.run.v2.WorkerPool.fromObject(object.workerPools[i]);
+                                    message.workerPools[i] = $root.google.cloud.run.v2.WorkerPool.fromObject(object.workerPools[i], long + 1);
                                 }
                             }
                             if (object.nextPageToken != null)
@@ -34230,7 +35498,7 @@
                         function GetWorkerPoolRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -34295,9 +35563,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        GetWorkerPoolRequest.decode = function decode(reader, length, error) {
+                        GetWorkerPoolRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.GetWorkerPoolRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -34309,7 +35581,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -34340,9 +35612,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        GetWorkerPoolRequest.verify = function verify(message) {
+                        GetWorkerPoolRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -34357,9 +35633,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.GetWorkerPoolRequest} GetWorkerPoolRequest
                          */
-                        GetWorkerPoolRequest.fromObject = function fromObject(object) {
+                        GetWorkerPoolRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.GetWorkerPoolRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.GetWorkerPoolRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -34437,7 +35717,7 @@
                         function DeleteWorkerPoolRequest(properties) {
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -34522,9 +35802,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        DeleteWorkerPoolRequest.decode = function decode(reader, length, error) {
+                        DeleteWorkerPoolRequest.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.DeleteWorkerPoolRequest();
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -34544,7 +35828,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -34575,9 +35859,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        DeleteWorkerPoolRequest.verify = function verify(message) {
+                        DeleteWorkerPoolRequest.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -34598,9 +35886,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.DeleteWorkerPoolRequest} DeleteWorkerPoolRequest
                          */
-                        DeleteWorkerPoolRequest.fromObject = function fromObject(object) {
+                        DeleteWorkerPoolRequest.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.DeleteWorkerPoolRequest)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.DeleteWorkerPoolRequest();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -34722,7 +36014,7 @@
                             this.customAudiences = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -35083,9 +36375,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        WorkerPool.decode = function decode(reader, length, error) {
+                        WorkerPool.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.WorkerPool(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -35124,10 +36420,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -35147,27 +36445,29 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.annotations, key);
                                         message.annotations[key] = value;
                                         break;
                                     }
                                 case 7: {
-                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.createTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 8: {
-                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.updateTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 9: {
-                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.deleteTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
-                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                        message.expireTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 11: {
@@ -35191,21 +36491,21 @@
                                         break;
                                     }
                                 case 17: {
-                                        message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.decode(reader, reader.uint32());
+                                        message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 18: {
-                                        message.template = $root.google.cloud.run.v2.WorkerPoolRevisionTemplate.decode(reader, reader.uint32());
+                                        message.template = $root.google.cloud.run.v2.WorkerPoolRevisionTemplate.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 26: {
                                         if (!(message.instanceSplits && message.instanceSplits.length))
                                             message.instanceSplits = [];
-                                        message.instanceSplits.push($root.google.cloud.run.v2.InstanceSplit.decode(reader, reader.uint32()));
+                                        message.instanceSplits.push($root.google.cloud.run.v2.InstanceSplit.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 20: {
-                                        message.scaling = $root.google.cloud.run.v2.WorkerPoolScaling.decode(reader, reader.uint32());
+                                        message.scaling = $root.google.cloud.run.v2.WorkerPoolScaling.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 30: {
@@ -35213,13 +36513,13 @@
                                         break;
                                     }
                                 case 31: {
-                                        message.terminalCondition = $root.google.cloud.run.v2.Condition.decode(reader, reader.uint32());
+                                        message.terminalCondition = $root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 32: {
                                         if (!(message.conditions && message.conditions.length))
                                             message.conditions = [];
-                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32()));
+                                        message.conditions.push($root.google.cloud.run.v2.Condition.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 33: {
@@ -35233,7 +36533,7 @@
                                 case 27: {
                                         if (!(message.instanceSplitStatuses && message.instanceSplitStatuses.length))
                                             message.instanceSplitStatuses = [];
-                                        message.instanceSplitStatuses.push($root.google.cloud.run.v2.InstanceSplitStatus.decode(reader, reader.uint32()));
+                                        message.instanceSplitStatuses.push($root.google.cloud.run.v2.InstanceSplitStatus.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 28: {
@@ -35259,7 +36559,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -35290,9 +36590,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        WorkerPool.verify = function verify(message) {
+                        WorkerPool.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             if (message.name != null && message.hasOwnProperty("name"))
                                 if (!$util.isString(message.name))
                                     return "name: string expected";
@@ -35322,22 +36626,22 @@
                                         return "annotations: string{k:string} expected";
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.createTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.createTime, long + 1);
                                 if (error)
                                     return "createTime." + error;
                             }
                             if (message.updateTime != null && message.hasOwnProperty("updateTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.updateTime, long + 1);
                                 if (error)
                                     return "updateTime." + error;
                             }
                             if (message.deleteTime != null && message.hasOwnProperty("deleteTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.deleteTime, long + 1);
                                 if (error)
                                     return "deleteTime." + error;
                             }
                             if (message.expireTime != null && message.hasOwnProperty("expireTime")) {
-                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime);
+                                var error = $root.google.protobuf.Timestamp.verify(message.expireTime, long + 1);
                                 if (error)
                                     return "expireTime." + error;
                             }
@@ -35368,12 +36672,12 @@
                                     break;
                                 }
                             if (message.binaryAuthorization != null && message.hasOwnProperty("binaryAuthorization")) {
-                                var error = $root.google.cloud.run.v2.BinaryAuthorization.verify(message.binaryAuthorization);
+                                var error = $root.google.cloud.run.v2.BinaryAuthorization.verify(message.binaryAuthorization, long + 1);
                                 if (error)
                                     return "binaryAuthorization." + error;
                             }
                             if (message.template != null && message.hasOwnProperty("template")) {
-                                var error = $root.google.cloud.run.v2.WorkerPoolRevisionTemplate.verify(message.template);
+                                var error = $root.google.cloud.run.v2.WorkerPoolRevisionTemplate.verify(message.template, long + 1);
                                 if (error)
                                     return "template." + error;
                             }
@@ -35381,13 +36685,13 @@
                                 if (!Array.isArray(message.instanceSplits))
                                     return "instanceSplits: array expected";
                                 for (var i = 0; i < message.instanceSplits.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.InstanceSplit.verify(message.instanceSplits[i]);
+                                    var error = $root.google.cloud.run.v2.InstanceSplit.verify(message.instanceSplits[i], long + 1);
                                     if (error)
                                         return "instanceSplits." + error;
                                 }
                             }
                             if (message.scaling != null && message.hasOwnProperty("scaling")) {
-                                var error = $root.google.cloud.run.v2.WorkerPoolScaling.verify(message.scaling);
+                                var error = $root.google.cloud.run.v2.WorkerPoolScaling.verify(message.scaling, long + 1);
                                 if (error)
                                     return "scaling." + error;
                             }
@@ -35395,7 +36699,7 @@
                                 if (!$util.isInteger(message.observedGeneration) && !(message.observedGeneration && $util.isInteger(message.observedGeneration.low) && $util.isInteger(message.observedGeneration.high)))
                                     return "observedGeneration: integer|Long expected";
                             if (message.terminalCondition != null && message.hasOwnProperty("terminalCondition")) {
-                                var error = $root.google.cloud.run.v2.Condition.verify(message.terminalCondition);
+                                var error = $root.google.cloud.run.v2.Condition.verify(message.terminalCondition, long + 1);
                                 if (error)
                                     return "terminalCondition." + error;
                             }
@@ -35403,7 +36707,7 @@
                                 if (!Array.isArray(message.conditions))
                                     return "conditions: array expected";
                                 for (var i = 0; i < message.conditions.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i]);
+                                    var error = $root.google.cloud.run.v2.Condition.verify(message.conditions[i], long + 1);
                                     if (error)
                                         return "conditions." + error;
                                 }
@@ -35418,7 +36722,7 @@
                                 if (!Array.isArray(message.instanceSplitStatuses))
                                     return "instanceSplitStatuses: array expected";
                                 for (var i = 0; i < message.instanceSplitStatuses.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.InstanceSplitStatus.verify(message.instanceSplitStatuses[i]);
+                                    var error = $root.google.cloud.run.v2.InstanceSplitStatus.verify(message.instanceSplitStatuses[i], long + 1);
                                     if (error)
                                         return "instanceSplitStatuses." + error;
                                 }
@@ -35453,9 +36757,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.WorkerPool} WorkerPool
                          */
-                        WorkerPool.fromObject = function fromObject(object) {
+                        WorkerPool.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.WorkerPool)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.WorkerPool();
                             if (object.name != null)
                                 message.name = String(object.name);
@@ -35476,35 +36784,41 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPool.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.annotations) {
                                 if (typeof object.annotations !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPool.annotations: object expected");
                                 message.annotations = {};
-                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.annotations, keys[i]);
                                     message.annotations[keys[i]] = String(object.annotations[keys[i]]);
+                                }
                             }
                             if (object.createTime != null) {
                                 if (typeof object.createTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPool.createTime: object expected");
-                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime);
+                                message.createTime = $root.google.protobuf.Timestamp.fromObject(object.createTime, long + 1);
                             }
                             if (object.updateTime != null) {
                                 if (typeof object.updateTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPool.updateTime: object expected");
-                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime);
+                                message.updateTime = $root.google.protobuf.Timestamp.fromObject(object.updateTime, long + 1);
                             }
                             if (object.deleteTime != null) {
                                 if (typeof object.deleteTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPool.deleteTime: object expected");
-                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime);
+                                message.deleteTime = $root.google.protobuf.Timestamp.fromObject(object.deleteTime, long + 1);
                             }
                             if (object.expireTime != null) {
                                 if (typeof object.expireTime !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPool.expireTime: object expected");
-                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime);
+                                message.expireTime = $root.google.protobuf.Timestamp.fromObject(object.expireTime, long + 1);
                             }
                             if (object.creator != null)
                                 message.creator = String(object.creator);
@@ -35557,12 +36871,12 @@
                             if (object.binaryAuthorization != null) {
                                 if (typeof object.binaryAuthorization !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPool.binaryAuthorization: object expected");
-                                message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.fromObject(object.binaryAuthorization);
+                                message.binaryAuthorization = $root.google.cloud.run.v2.BinaryAuthorization.fromObject(object.binaryAuthorization, long + 1);
                             }
                             if (object.template != null) {
                                 if (typeof object.template !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPool.template: object expected");
-                                message.template = $root.google.cloud.run.v2.WorkerPoolRevisionTemplate.fromObject(object.template);
+                                message.template = $root.google.cloud.run.v2.WorkerPoolRevisionTemplate.fromObject(object.template, long + 1);
                             }
                             if (object.instanceSplits) {
                                 if (!Array.isArray(object.instanceSplits))
@@ -35571,13 +36885,13 @@
                                 for (var i = 0; i < object.instanceSplits.length; ++i) {
                                     if (typeof object.instanceSplits[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.WorkerPool.instanceSplits: object expected");
-                                    message.instanceSplits[i] = $root.google.cloud.run.v2.InstanceSplit.fromObject(object.instanceSplits[i]);
+                                    message.instanceSplits[i] = $root.google.cloud.run.v2.InstanceSplit.fromObject(object.instanceSplits[i], long + 1);
                                 }
                             }
                             if (object.scaling != null) {
                                 if (typeof object.scaling !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPool.scaling: object expected");
-                                message.scaling = $root.google.cloud.run.v2.WorkerPoolScaling.fromObject(object.scaling);
+                                message.scaling = $root.google.cloud.run.v2.WorkerPoolScaling.fromObject(object.scaling, long + 1);
                             }
                             if (object.observedGeneration != null)
                                 if ($util.Long)
@@ -35591,7 +36905,7 @@
                             if (object.terminalCondition != null) {
                                 if (typeof object.terminalCondition !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPool.terminalCondition: object expected");
-                                message.terminalCondition = $root.google.cloud.run.v2.Condition.fromObject(object.terminalCondition);
+                                message.terminalCondition = $root.google.cloud.run.v2.Condition.fromObject(object.terminalCondition, long + 1);
                             }
                             if (object.conditions) {
                                 if (!Array.isArray(object.conditions))
@@ -35600,7 +36914,7 @@
                                 for (var i = 0; i < object.conditions.length; ++i) {
                                     if (typeof object.conditions[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.WorkerPool.conditions: object expected");
-                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i]);
+                                    message.conditions[i] = $root.google.cloud.run.v2.Condition.fromObject(object.conditions[i], long + 1);
                                 }
                             }
                             if (object.latestReadyRevision != null)
@@ -35614,7 +36928,7 @@
                                 for (var i = 0; i < object.instanceSplitStatuses.length; ++i) {
                                     if (typeof object.instanceSplitStatuses[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.WorkerPool.instanceSplitStatuses: object expected");
-                                    message.instanceSplitStatuses[i] = $root.google.cloud.run.v2.InstanceSplitStatus.fromObject(object.instanceSplitStatuses[i]);
+                                    message.instanceSplitStatuses[i] = $root.google.cloud.run.v2.InstanceSplitStatus.fromObject(object.instanceSplitStatuses[i], long + 1);
                                 }
                             }
                             if (object.threatDetectionEnabled != null)
@@ -35706,13 +37020,19 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.annotations && (keys2 = Object.keys(message.annotations)).length) {
                                 object.annotations = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.annotations, keys2[j]);
                                     object.annotations[keys2[j]] = message.annotations[keys2[j]];
+                                }
                             }
                             if (message.createTime != null && message.hasOwnProperty("createTime"))
                                 object.createTime = $root.google.protobuf.Timestamp.toObject(message.createTime, options);
@@ -35845,7 +37165,7 @@
                             this.volumes = [];
                             if (properties)
                                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                    if (properties[keys[i]] != null)
+                                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                         this[keys[i]] = properties[keys[i]];
                         }
     
@@ -36043,9 +37363,13 @@
                          * @throws {Error} If the payload is not a reader or valid buffer
                          * @throws {$protobuf.util.ProtocolError} If required fields are missing
                          */
-                        WorkerPoolRevisionTemplate.decode = function decode(reader, length, error) {
+                        WorkerPoolRevisionTemplate.decode = function decode(reader, length, error, long) {
                             if (!(reader instanceof $Reader))
                                 reader = $Reader.create(reader);
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $Reader.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.run.v2.WorkerPoolRevisionTemplate(), key, value;
                             while (reader.pos < end) {
                                 var tag = reader.uint32();
@@ -36072,10 +37396,12 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.labels, key);
                                         message.labels[key] = value;
                                         break;
                                     }
@@ -36095,15 +37421,17 @@
                                                 value = reader.string();
                                                 break;
                                             default:
-                                                reader.skipType(tag2 & 7);
+                                                reader.skipType(tag2 & 7, long);
                                                 break;
                                             }
                                         }
+                                        if (key === "__proto__")
+                                            $util.makeProp(message.annotations, key);
                                         message.annotations[key] = value;
                                         break;
                                     }
                                 case 4: {
-                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32());
+                                        message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 5: {
@@ -36113,13 +37441,13 @@
                                 case 6: {
                                         if (!(message.containers && message.containers.length))
                                             message.containers = [];
-                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32()));
+                                        message.containers.push($root.google.cloud.run.v2.Container.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 7: {
                                         if (!(message.volumes && message.volumes.length))
                                             message.volumes = [];
-                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32()));
+                                        message.volumes.push($root.google.cloud.run.v2.Volume.decode(reader, reader.uint32(), undefined, long + 1));
                                         break;
                                     }
                                 case 8: {
@@ -36127,7 +37455,7 @@
                                         break;
                                     }
                                 case 9: {
-                                        message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.decode(reader, reader.uint32());
+                                        message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 10: {
@@ -36135,11 +37463,11 @@
                                         break;
                                     }
                                 case 11: {
-                                        message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                        message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 13: {
-                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32());
+                                        message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.decode(reader, reader.uint32(), undefined, long + 1);
                                         break;
                                     }
                                 case 16: {
@@ -36147,7 +37475,7 @@
                                         break;
                                     }
                                 default:
-                                    reader.skipType(tag & 7);
+                                    reader.skipType(tag & 7, long);
                                     break;
                                 }
                             }
@@ -36178,9 +37506,13 @@
                          * @param {Object.<string,*>} message Plain object to verify
                          * @returns {string|null} `null` if valid, otherwise the reason why it is not
                          */
-                        WorkerPoolRevisionTemplate.verify = function verify(message) {
+                        WorkerPoolRevisionTemplate.verify = function verify(message, long) {
                             if (typeof message !== "object" || message === null)
                                 return "object expected";
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                return "maximum nesting depth exceeded";
                             var properties = {};
                             if (message.revision != null && message.hasOwnProperty("revision"))
                                 if (!$util.isString(message.revision))
@@ -36202,7 +37534,7 @@
                                         return "annotations: string{k:string} expected";
                             }
                             if (message.vpcAccess != null && message.hasOwnProperty("vpcAccess")) {
-                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess);
+                                var error = $root.google.cloud.run.v2.VpcAccess.verify(message.vpcAccess, long + 1);
                                 if (error)
                                     return "vpcAccess." + error;
                             }
@@ -36213,7 +37545,7 @@
                                 if (!Array.isArray(message.containers))
                                     return "containers: array expected";
                                 for (var i = 0; i < message.containers.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i]);
+                                    var error = $root.google.cloud.run.v2.Container.verify(message.containers[i], long + 1);
                                     if (error)
                                         return "containers." + error;
                                 }
@@ -36222,7 +37554,7 @@
                                 if (!Array.isArray(message.volumes))
                                     return "volumes: array expected";
                                 for (var i = 0; i < message.volumes.length; ++i) {
-                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i]);
+                                    var error = $root.google.cloud.run.v2.Volume.verify(message.volumes[i], long + 1);
                                     if (error)
                                         return "volumes." + error;
                                 }
@@ -36231,7 +37563,7 @@
                                 if (!$util.isString(message.encryptionKey))
                                     return "encryptionKey: string expected";
                             if (message.serviceMesh != null && message.hasOwnProperty("serviceMesh")) {
-                                var error = $root.google.cloud.run.v2.ServiceMesh.verify(message.serviceMesh);
+                                var error = $root.google.cloud.run.v2.ServiceMesh.verify(message.serviceMesh, long + 1);
                                 if (error)
                                     return "serviceMesh." + error;
                             }
@@ -36245,12 +37577,12 @@
                                     break;
                                 }
                             if (message.encryptionKeyShutdownDuration != null && message.hasOwnProperty("encryptionKeyShutdownDuration")) {
-                                var error = $root.google.protobuf.Duration.verify(message.encryptionKeyShutdownDuration);
+                                var error = $root.google.protobuf.Duration.verify(message.encryptionKeyShutdownDuration, long + 1);
                                 if (error)
                                     return "encryptionKeyShutdownDuration." + error;
                             }
                             if (message.nodeSelector != null && message.hasOwnProperty("nodeSelector")) {
-                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector);
+                                var error = $root.google.cloud.run.v2.NodeSelector.verify(message.nodeSelector, long + 1);
                                 if (error)
                                     return "nodeSelector." + error;
                             }
@@ -36270,9 +37602,13 @@
                          * @param {Object.<string,*>} object Plain object
                          * @returns {google.cloud.run.v2.WorkerPoolRevisionTemplate} WorkerPoolRevisionTemplate
                          */
-                        WorkerPoolRevisionTemplate.fromObject = function fromObject(object) {
+                        WorkerPoolRevisionTemplate.fromObject = function fromObject(object, long) {
                             if (object instanceof $root.google.cloud.run.v2.WorkerPoolRevisionTemplate)
                                 return object;
+                            if (long === undefined)
+                                long = 0;
+                            if (long > $util.recursionLimit)
+                                throw Error("maximum nesting depth exceeded");
                             var message = new $root.google.cloud.run.v2.WorkerPoolRevisionTemplate();
                             if (object.revision != null)
                                 message.revision = String(object.revision);
@@ -36280,20 +37616,26 @@
                                 if (typeof object.labels !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPoolRevisionTemplate.labels: object expected");
                                 message.labels = {};
-                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.labels), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.labels, keys[i]);
                                     message.labels[keys[i]] = String(object.labels[keys[i]]);
+                                }
                             }
                             if (object.annotations) {
                                 if (typeof object.annotations !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPoolRevisionTemplate.annotations: object expected");
                                 message.annotations = {};
-                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i)
+                                for (var keys = Object.keys(object.annotations), i = 0; i < keys.length; ++i) {
+                                    if (keys[i] === "__proto__")
+                                        $util.makeProp(message.annotations, keys[i]);
                                     message.annotations[keys[i]] = String(object.annotations[keys[i]]);
+                                }
                             }
                             if (object.vpcAccess != null) {
                                 if (typeof object.vpcAccess !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPoolRevisionTemplate.vpcAccess: object expected");
-                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess);
+                                message.vpcAccess = $root.google.cloud.run.v2.VpcAccess.fromObject(object.vpcAccess, long + 1);
                             }
                             if (object.serviceAccount != null)
                                 message.serviceAccount = String(object.serviceAccount);
@@ -36304,7 +37646,7 @@
                                 for (var i = 0; i < object.containers.length; ++i) {
                                     if (typeof object.containers[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.WorkerPoolRevisionTemplate.containers: object expected");
-                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i]);
+                                    message.containers[i] = $root.google.cloud.run.v2.Container.fromObject(object.containers[i], long + 1);
                                 }
                             }
                             if (object.volumes) {
@@ -36314,7 +37656,7 @@
                                 for (var i = 0; i < object.volumes.length; ++i) {
                                     if (typeof object.volumes[i] !== "object")
                                         throw TypeError(".google.cloud.run.v2.WorkerPoolRevisionTemplate.volumes: object expected");
-                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i]);
+                                    message.volumes[i] = $root.google.cloud.run.v2.Volume.fromObject(object.volumes[i], long + 1);
                                 }
                             }
                             if (object.encryptionKey != null)
@@ -36322,7 +37664,7 @@
                             if (object.serviceMesh != null) {
                                 if (typeof object.serviceMesh !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPoolRevisionTemplate.serviceMesh: object expected");
-                                message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.fromObject(object.serviceMesh);
+                                message.serviceMesh = $root.google.cloud.run.v2.ServiceMesh.fromObject(object.serviceMesh, long + 1);
                             }
                             switch (object.encryptionKeyRevocationAction) {
                             default:
@@ -36347,12 +37689,12 @@
                             if (object.encryptionKeyShutdownDuration != null) {
                                 if (typeof object.encryptionKeyShutdownDuration !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPoolRevisionTemplate.encryptionKeyShutdownDuration: object expected");
-                                message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.fromObject(object.encryptionKeyShutdownDuration);
+                                message.encryptionKeyShutdownDuration = $root.google.protobuf.Duration.fromObject(object.encryptionKeyShutdownDuration, long + 1);
                             }
                             if (object.nodeSelector != null) {
                                 if (typeof object.nodeSelector !== "object")
                                     throw TypeError(".google.cloud.run.v2.WorkerPoolRevisionTemplate.nodeSelector: object expected");
-                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector);
+                                message.nodeSelector = $root.google.cloud.run.v2.NodeSelector.fromObject(object.nodeSelector, long + 1);
                             }
                             if (object.gpuZonalRedundancyDisabled != null)
                                 message.gpuZonalRedundancyDisabled = Boolean(object.gpuZonalRedundancyDisabled);
@@ -36395,13 +37737,19 @@
                             var keys2;
                             if (message.labels && (keys2 = Object.keys(message.labels)).length) {
                                 object.labels = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.labels, keys2[j]);
                                     object.labels[keys2[j]] = message.labels[keys2[j]];
+                                }
                             }
                             if (message.annotations && (keys2 = Object.keys(message.annotations)).length) {
                                 object.annotations = {};
-                                for (var j = 0; j < keys2.length; ++j)
+                                for (var j = 0; j < keys2.length; ++j) {
+                                    if (keys2[j] === "__proto__")
+                                        $util.makeProp(object.annotations, keys2[j]);
                                     object.annotations[keys2[j]] = message.annotations[keys2[j]];
+                                }
                             }
                             if (message.vpcAccess != null && message.hasOwnProperty("vpcAccess"))
                                 object.vpcAccess = $root.google.cloud.run.v2.VpcAccess.toObject(message.vpcAccess, options);
@@ -36504,7 +37852,7 @@
                     this.rules = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -36580,9 +37928,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Http.decode = function decode(reader, length, error) {
+                Http.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Http();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36592,7 +37944,7 @@
                         case 1: {
                                 if (!(message.rules && message.rules.length))
                                     message.rules = [];
-                                message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32()));
+                                message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
@@ -36600,7 +37952,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -36631,14 +37983,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Http.verify = function verify(message) {
+                Http.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.rules != null && message.hasOwnProperty("rules")) {
                         if (!Array.isArray(message.rules))
                             return "rules: array expected";
                         for (var i = 0; i < message.rules.length; ++i) {
-                            var error = $root.google.api.HttpRule.verify(message.rules[i]);
+                            var error = $root.google.api.HttpRule.verify(message.rules[i], long + 1);
                             if (error)
                                 return "rules." + error;
                         }
@@ -36657,9 +38013,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.Http} Http
                  */
-                Http.fromObject = function fromObject(object) {
+                Http.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.Http)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.Http();
                     if (object.rules) {
                         if (!Array.isArray(object.rules))
@@ -36668,7 +38028,7 @@
                         for (var i = 0; i < object.rules.length; ++i) {
                             if (typeof object.rules[i] !== "object")
                                 throw TypeError(".google.api.Http.rules: object expected");
-                            message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i]);
+                            message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i], long + 1);
                         }
                     }
                     if (object.fullyDecodeReservedExpansion != null)
@@ -36762,7 +38122,7 @@
                     this.additionalBindings = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -36932,9 +38292,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                HttpRule.decode = function decode(reader, length, error) {
+                HttpRule.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.HttpRule();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -36966,7 +38330,7 @@
                                 break;
                             }
                         case 8: {
-                                message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32());
+                                message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 7: {
@@ -36980,11 +38344,11 @@
                         case 11: {
                                 if (!(message.additionalBindings && message.additionalBindings.length))
                                     message.additionalBindings = [];
-                                message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32()));
+                                message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -37015,9 +38379,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                HttpRule.verify = function verify(message) {
+                HttpRule.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.selector != null && message.hasOwnProperty("selector"))
                         if (!$util.isString(message.selector))
@@ -37060,7 +38428,7 @@
                             return "pattern: multiple values";
                         properties.pattern = 1;
                         {
-                            var error = $root.google.api.CustomHttpPattern.verify(message.custom);
+                            var error = $root.google.api.CustomHttpPattern.verify(message.custom, long + 1);
                             if (error)
                                 return "custom." + error;
                         }
@@ -37075,7 +38443,7 @@
                         if (!Array.isArray(message.additionalBindings))
                             return "additionalBindings: array expected";
                         for (var i = 0; i < message.additionalBindings.length; ++i) {
-                            var error = $root.google.api.HttpRule.verify(message.additionalBindings[i]);
+                            var error = $root.google.api.HttpRule.verify(message.additionalBindings[i], long + 1);
                             if (error)
                                 return "additionalBindings." + error;
                         }
@@ -37091,9 +38459,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.HttpRule} HttpRule
                  */
-                HttpRule.fromObject = function fromObject(object) {
+                HttpRule.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.HttpRule)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.HttpRule();
                     if (object.selector != null)
                         message.selector = String(object.selector);
@@ -37110,7 +38482,7 @@
                     if (object.custom != null) {
                         if (typeof object.custom !== "object")
                             throw TypeError(".google.api.HttpRule.custom: object expected");
-                        message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom);
+                        message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom, long + 1);
                     }
                     if (object.body != null)
                         message.body = String(object.body);
@@ -37123,7 +38495,7 @@
                         for (var i = 0; i < object.additionalBindings.length; ++i) {
                             if (typeof object.additionalBindings[i] !== "object")
                                 throw TypeError(".google.api.HttpRule.additionalBindings: object expected");
-                            message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i]);
+                            message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i], long + 1);
                         }
                     }
                     return message;
@@ -37243,7 +38615,7 @@
                 function CustomHttpPattern(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -37318,9 +38690,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CustomHttpPattern.decode = function decode(reader, length, error) {
+                CustomHttpPattern.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CustomHttpPattern();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -37336,7 +38712,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -37367,9 +38743,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CustomHttpPattern.verify = function verify(message) {
+                CustomHttpPattern.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.kind != null && message.hasOwnProperty("kind"))
                         if (!$util.isString(message.kind))
                             return "kind: string expected";
@@ -37387,9 +38767,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CustomHttpPattern} CustomHttpPattern
                  */
-                CustomHttpPattern.fromObject = function fromObject(object) {
+                CustomHttpPattern.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CustomHttpPattern)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CustomHttpPattern();
                     if (object.kind != null)
                         message.kind = String(object.kind);
@@ -37474,7 +38858,7 @@
                     this.destinations = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -37563,9 +38947,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CommonLanguageSettings.decode = function decode(reader, length, error) {
+                CommonLanguageSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CommonLanguageSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -37588,11 +38976,11 @@
                                 break;
                             }
                         case 3: {
-                                message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.decode(reader, reader.uint32());
+                                message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -37623,9 +39011,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CommonLanguageSettings.verify = function verify(message) {
+                CommonLanguageSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.referenceDocsUri != null && message.hasOwnProperty("referenceDocsUri"))
                         if (!$util.isString(message.referenceDocsUri))
                             return "referenceDocsUri: string expected";
@@ -37643,7 +39035,7 @@
                             }
                     }
                     if (message.selectiveGapicGeneration != null && message.hasOwnProperty("selectiveGapicGeneration")) {
-                        var error = $root.google.api.SelectiveGapicGeneration.verify(message.selectiveGapicGeneration);
+                        var error = $root.google.api.SelectiveGapicGeneration.verify(message.selectiveGapicGeneration, long + 1);
                         if (error)
                             return "selectiveGapicGeneration." + error;
                     }
@@ -37658,9 +39050,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CommonLanguageSettings} CommonLanguageSettings
                  */
-                CommonLanguageSettings.fromObject = function fromObject(object) {
+                CommonLanguageSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CommonLanguageSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CommonLanguageSettings();
                     if (object.referenceDocsUri != null)
                         message.referenceDocsUri = String(object.referenceDocsUri);
@@ -37692,7 +39088,7 @@
                     if (object.selectiveGapicGeneration != null) {
                         if (typeof object.selectiveGapicGeneration !== "object")
                             throw TypeError(".google.api.CommonLanguageSettings.selectiveGapicGeneration: object expected");
-                        message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.fromObject(object.selectiveGapicGeneration);
+                        message.selectiveGapicGeneration = $root.google.api.SelectiveGapicGeneration.fromObject(object.selectiveGapicGeneration, long + 1);
                     }
                     return message;
                 };
@@ -37787,7 +39183,7 @@
                 function ClientLibrarySettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -37952,9 +39348,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ClientLibrarySettings.decode = function decode(reader, length, error) {
+                ClientLibrarySettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ClientLibrarySettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -37974,39 +39374,39 @@
                                 break;
                             }
                         case 21: {
-                                message.javaSettings = $root.google.api.JavaSettings.decode(reader, reader.uint32());
+                                message.javaSettings = $root.google.api.JavaSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 22: {
-                                message.cppSettings = $root.google.api.CppSettings.decode(reader, reader.uint32());
+                                message.cppSettings = $root.google.api.CppSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 23: {
-                                message.phpSettings = $root.google.api.PhpSettings.decode(reader, reader.uint32());
+                                message.phpSettings = $root.google.api.PhpSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 24: {
-                                message.pythonSettings = $root.google.api.PythonSettings.decode(reader, reader.uint32());
+                                message.pythonSettings = $root.google.api.PythonSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 25: {
-                                message.nodeSettings = $root.google.api.NodeSettings.decode(reader, reader.uint32());
+                                message.nodeSettings = $root.google.api.NodeSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 26: {
-                                message.dotnetSettings = $root.google.api.DotnetSettings.decode(reader, reader.uint32());
+                                message.dotnetSettings = $root.google.api.DotnetSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 27: {
-                                message.rubySettings = $root.google.api.RubySettings.decode(reader, reader.uint32());
+                                message.rubySettings = $root.google.api.RubySettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 28: {
-                                message.goSettings = $root.google.api.GoSettings.decode(reader, reader.uint32());
+                                message.goSettings = $root.google.api.GoSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38037,9 +39437,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ClientLibrarySettings.verify = function verify(message) {
+                ClientLibrarySettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.version != null && message.hasOwnProperty("version"))
                         if (!$util.isString(message.version))
                             return "version: string expected";
@@ -38061,42 +39465,42 @@
                         if (typeof message.restNumericEnums !== "boolean")
                             return "restNumericEnums: boolean expected";
                     if (message.javaSettings != null && message.hasOwnProperty("javaSettings")) {
-                        var error = $root.google.api.JavaSettings.verify(message.javaSettings);
+                        var error = $root.google.api.JavaSettings.verify(message.javaSettings, long + 1);
                         if (error)
                             return "javaSettings." + error;
                     }
                     if (message.cppSettings != null && message.hasOwnProperty("cppSettings")) {
-                        var error = $root.google.api.CppSettings.verify(message.cppSettings);
+                        var error = $root.google.api.CppSettings.verify(message.cppSettings, long + 1);
                         if (error)
                             return "cppSettings." + error;
                     }
                     if (message.phpSettings != null && message.hasOwnProperty("phpSettings")) {
-                        var error = $root.google.api.PhpSettings.verify(message.phpSettings);
+                        var error = $root.google.api.PhpSettings.verify(message.phpSettings, long + 1);
                         if (error)
                             return "phpSettings." + error;
                     }
                     if (message.pythonSettings != null && message.hasOwnProperty("pythonSettings")) {
-                        var error = $root.google.api.PythonSettings.verify(message.pythonSettings);
+                        var error = $root.google.api.PythonSettings.verify(message.pythonSettings, long + 1);
                         if (error)
                             return "pythonSettings." + error;
                     }
                     if (message.nodeSettings != null && message.hasOwnProperty("nodeSettings")) {
-                        var error = $root.google.api.NodeSettings.verify(message.nodeSettings);
+                        var error = $root.google.api.NodeSettings.verify(message.nodeSettings, long + 1);
                         if (error)
                             return "nodeSettings." + error;
                     }
                     if (message.dotnetSettings != null && message.hasOwnProperty("dotnetSettings")) {
-                        var error = $root.google.api.DotnetSettings.verify(message.dotnetSettings);
+                        var error = $root.google.api.DotnetSettings.verify(message.dotnetSettings, long + 1);
                         if (error)
                             return "dotnetSettings." + error;
                     }
                     if (message.rubySettings != null && message.hasOwnProperty("rubySettings")) {
-                        var error = $root.google.api.RubySettings.verify(message.rubySettings);
+                        var error = $root.google.api.RubySettings.verify(message.rubySettings, long + 1);
                         if (error)
                             return "rubySettings." + error;
                     }
                     if (message.goSettings != null && message.hasOwnProperty("goSettings")) {
-                        var error = $root.google.api.GoSettings.verify(message.goSettings);
+                        var error = $root.google.api.GoSettings.verify(message.goSettings, long + 1);
                         if (error)
                             return "goSettings." + error;
                     }
@@ -38111,9 +39515,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ClientLibrarySettings} ClientLibrarySettings
                  */
-                ClientLibrarySettings.fromObject = function fromObject(object) {
+                ClientLibrarySettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ClientLibrarySettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ClientLibrarySettings();
                     if (object.version != null)
                         message.version = String(object.version);
@@ -38162,42 +39570,42 @@
                     if (object.javaSettings != null) {
                         if (typeof object.javaSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.javaSettings: object expected");
-                        message.javaSettings = $root.google.api.JavaSettings.fromObject(object.javaSettings);
+                        message.javaSettings = $root.google.api.JavaSettings.fromObject(object.javaSettings, long + 1);
                     }
                     if (object.cppSettings != null) {
                         if (typeof object.cppSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.cppSettings: object expected");
-                        message.cppSettings = $root.google.api.CppSettings.fromObject(object.cppSettings);
+                        message.cppSettings = $root.google.api.CppSettings.fromObject(object.cppSettings, long + 1);
                     }
                     if (object.phpSettings != null) {
                         if (typeof object.phpSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.phpSettings: object expected");
-                        message.phpSettings = $root.google.api.PhpSettings.fromObject(object.phpSettings);
+                        message.phpSettings = $root.google.api.PhpSettings.fromObject(object.phpSettings, long + 1);
                     }
                     if (object.pythonSettings != null) {
                         if (typeof object.pythonSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.pythonSettings: object expected");
-                        message.pythonSettings = $root.google.api.PythonSettings.fromObject(object.pythonSettings);
+                        message.pythonSettings = $root.google.api.PythonSettings.fromObject(object.pythonSettings, long + 1);
                     }
                     if (object.nodeSettings != null) {
                         if (typeof object.nodeSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.nodeSettings: object expected");
-                        message.nodeSettings = $root.google.api.NodeSettings.fromObject(object.nodeSettings);
+                        message.nodeSettings = $root.google.api.NodeSettings.fromObject(object.nodeSettings, long + 1);
                     }
                     if (object.dotnetSettings != null) {
                         if (typeof object.dotnetSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.dotnetSettings: object expected");
-                        message.dotnetSettings = $root.google.api.DotnetSettings.fromObject(object.dotnetSettings);
+                        message.dotnetSettings = $root.google.api.DotnetSettings.fromObject(object.dotnetSettings, long + 1);
                     }
                     if (object.rubySettings != null) {
                         if (typeof object.rubySettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.rubySettings: object expected");
-                        message.rubySettings = $root.google.api.RubySettings.fromObject(object.rubySettings);
+                        message.rubySettings = $root.google.api.RubySettings.fromObject(object.rubySettings, long + 1);
                     }
                     if (object.goSettings != null) {
                         if (typeof object.goSettings !== "object")
                             throw TypeError(".google.api.ClientLibrarySettings.goSettings: object expected");
-                        message.goSettings = $root.google.api.GoSettings.fromObject(object.goSettings);
+                        message.goSettings = $root.google.api.GoSettings.fromObject(object.goSettings, long + 1);
                     }
                     return message;
                 };
@@ -38315,7 +39723,7 @@
                     this.librarySettings = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38483,9 +39891,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Publishing.decode = function decode(reader, length, error) {
+                Publishing.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Publishing();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38495,7 +39907,7 @@
                         case 2: {
                                 if (!(message.methodSettings && message.methodSettings.length))
                                     message.methodSettings = [];
-                                message.methodSettings.push($root.google.api.MethodSettings.decode(reader, reader.uint32()));
+                                message.methodSettings.push($root.google.api.MethodSettings.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 101: {
@@ -38531,7 +39943,7 @@
                         case 109: {
                                 if (!(message.librarySettings && message.librarySettings.length))
                                     message.librarySettings = [];
-                                message.librarySettings.push($root.google.api.ClientLibrarySettings.decode(reader, reader.uint32()));
+                                message.librarySettings.push($root.google.api.ClientLibrarySettings.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 110: {
@@ -38543,7 +39955,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -38574,14 +39986,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Publishing.verify = function verify(message) {
+                Publishing.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.methodSettings != null && message.hasOwnProperty("methodSettings")) {
                         if (!Array.isArray(message.methodSettings))
                             return "methodSettings: array expected";
                         for (var i = 0; i < message.methodSettings.length; ++i) {
-                            var error = $root.google.api.MethodSettings.verify(message.methodSettings[i]);
+                            var error = $root.google.api.MethodSettings.verify(message.methodSettings[i], long + 1);
                             if (error)
                                 return "methodSettings." + error;
                         }
@@ -38626,7 +40042,7 @@
                         if (!Array.isArray(message.librarySettings))
                             return "librarySettings: array expected";
                         for (var i = 0; i < message.librarySettings.length; ++i) {
-                            var error = $root.google.api.ClientLibrarySettings.verify(message.librarySettings[i]);
+                            var error = $root.google.api.ClientLibrarySettings.verify(message.librarySettings[i], long + 1);
                             if (error)
                                 return "librarySettings." + error;
                         }
@@ -38648,9 +40064,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.Publishing} Publishing
                  */
-                Publishing.fromObject = function fromObject(object) {
+                Publishing.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.Publishing)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.Publishing();
                     if (object.methodSettings) {
                         if (!Array.isArray(object.methodSettings))
@@ -38659,7 +40079,7 @@
                         for (var i = 0; i < object.methodSettings.length; ++i) {
                             if (typeof object.methodSettings[i] !== "object")
                                 throw TypeError(".google.api.Publishing.methodSettings: object expected");
-                            message.methodSettings[i] = $root.google.api.MethodSettings.fromObject(object.methodSettings[i]);
+                            message.methodSettings[i] = $root.google.api.MethodSettings.fromObject(object.methodSettings[i], long + 1);
                         }
                     }
                     if (object.newIssueUri != null)
@@ -38726,7 +40146,7 @@
                         for (var i = 0; i < object.librarySettings.length; ++i) {
                             if (typeof object.librarySettings[i] !== "object")
                                 throw TypeError(".google.api.Publishing.librarySettings: object expected");
-                            message.librarySettings[i] = $root.google.api.ClientLibrarySettings.fromObject(object.librarySettings[i]);
+                            message.librarySettings[i] = $root.google.api.ClientLibrarySettings.fromObject(object.librarySettings[i], long + 1);
                         }
                     }
                     if (object.protoReferenceDocumentationUri != null)
@@ -38850,7 +40270,7 @@
                     this.serviceClassNames = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -38936,9 +40356,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                JavaSettings.decode = function decode(reader, length, error) {
+                JavaSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.JavaSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -38965,19 +40389,21 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.serviceClassNames, key);
                                 message.serviceClassNames[key] = value;
                                 break;
                             }
                         case 3: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39008,9 +40434,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                JavaSettings.verify = function verify(message) {
+                JavaSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.libraryPackage != null && message.hasOwnProperty("libraryPackage"))
                         if (!$util.isString(message.libraryPackage))
                             return "libraryPackage: string expected";
@@ -39023,7 +40453,7 @@
                                 return "serviceClassNames: string{k:string} expected";
                     }
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -39038,9 +40468,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.JavaSettings} JavaSettings
                  */
-                JavaSettings.fromObject = function fromObject(object) {
+                JavaSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.JavaSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.JavaSettings();
                     if (object.libraryPackage != null)
                         message.libraryPackage = String(object.libraryPackage);
@@ -39048,13 +40482,16 @@
                         if (typeof object.serviceClassNames !== "object")
                             throw TypeError(".google.api.JavaSettings.serviceClassNames: object expected");
                         message.serviceClassNames = {};
-                        for (var keys = Object.keys(object.serviceClassNames), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.serviceClassNames), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.serviceClassNames, keys[i]);
                             message.serviceClassNames[keys[i]] = String(object.serviceClassNames[keys[i]]);
+                        }
                     }
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.JavaSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -39083,8 +40520,11 @@
                     var keys2;
                     if (message.serviceClassNames && (keys2 = Object.keys(message.serviceClassNames)).length) {
                         object.serviceClassNames = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.serviceClassNames, keys2[j]);
                             object.serviceClassNames[keys2[j]] = message.serviceClassNames[keys2[j]];
+                        }
                     }
                     if (message.common != null && message.hasOwnProperty("common"))
                         object.common = $root.google.api.CommonLanguageSettings.toObject(message.common, options);
@@ -39140,7 +40580,7 @@
                 function CppSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39205,9 +40645,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CppSettings.decode = function decode(reader, length, error) {
+                CppSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CppSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39215,11 +40659,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39250,11 +40694,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CppSettings.verify = function verify(message) {
+                CppSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -39269,14 +40717,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.CppSettings} CppSettings
                  */
-                CppSettings.fromObject = function fromObject(object) {
+                CppSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.CppSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.CppSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.CppSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -39350,7 +40802,7 @@
                 function PhpSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39415,9 +40867,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                PhpSettings.decode = function decode(reader, length, error) {
+                PhpSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PhpSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39425,11 +40881,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39460,11 +40916,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                PhpSettings.verify = function verify(message) {
+                PhpSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -39479,14 +40939,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.PhpSettings} PhpSettings
                  */
-                PhpSettings.fromObject = function fromObject(object) {
+                PhpSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.PhpSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.PhpSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.PhpSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -39561,7 +41025,7 @@
                 function PythonSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -39636,9 +41100,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                PythonSettings.decode = function decode(reader, length, error) {
+                PythonSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PythonSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -39646,15 +41114,15 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
-                                message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.decode(reader, reader.uint32());
+                                message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -39685,16 +41153,20 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                PythonSettings.verify = function verify(message) {
+                PythonSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
                     if (message.experimentalFeatures != null && message.hasOwnProperty("experimentalFeatures")) {
-                        var error = $root.google.api.PythonSettings.ExperimentalFeatures.verify(message.experimentalFeatures);
+                        var error = $root.google.api.PythonSettings.ExperimentalFeatures.verify(message.experimentalFeatures, long + 1);
                         if (error)
                             return "experimentalFeatures." + error;
                     }
@@ -39709,19 +41181,23 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.PythonSettings} PythonSettings
                  */
-                PythonSettings.fromObject = function fromObject(object) {
+                PythonSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.PythonSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.PythonSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.PythonSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.experimentalFeatures != null) {
                         if (typeof object.experimentalFeatures !== "object")
                             throw TypeError(".google.api.PythonSettings.experimentalFeatures: object expected");
-                        message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.fromObject(object.experimentalFeatures);
+                        message.experimentalFeatures = $root.google.api.PythonSettings.ExperimentalFeatures.fromObject(object.experimentalFeatures, long + 1);
                     }
                     return message;
                 };
@@ -39798,7 +41274,7 @@
                     function ExperimentalFeatures(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -39883,9 +41359,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ExperimentalFeatures.decode = function decode(reader, length, error) {
+                    ExperimentalFeatures.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.PythonSettings.ExperimentalFeatures();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -39905,7 +41385,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -39936,9 +41416,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ExperimentalFeatures.verify = function verify(message) {
+                    ExperimentalFeatures.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.restAsyncIoEnabled != null && message.hasOwnProperty("restAsyncIoEnabled"))
                             if (typeof message.restAsyncIoEnabled !== "boolean")
                                 return "restAsyncIoEnabled: boolean expected";
@@ -39959,9 +41443,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.api.PythonSettings.ExperimentalFeatures} ExperimentalFeatures
                      */
-                    ExperimentalFeatures.fromObject = function fromObject(object) {
+                    ExperimentalFeatures.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.api.PythonSettings.ExperimentalFeatures)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.api.PythonSettings.ExperimentalFeatures();
                         if (object.restAsyncIoEnabled != null)
                             message.restAsyncIoEnabled = Boolean(object.restAsyncIoEnabled);
@@ -40051,7 +41539,7 @@
                 function NodeSettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -40116,9 +41604,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                NodeSettings.decode = function decode(reader, length, error) {
+                NodeSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.NodeSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -40126,11 +41618,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -40161,11 +41653,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                NodeSettings.verify = function verify(message) {
+                NodeSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -40180,14 +41676,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.NodeSettings} NodeSettings
                  */
-                NodeSettings.fromObject = function fromObject(object) {
+                NodeSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.NodeSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.NodeSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.NodeSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -40271,7 +41771,7 @@
                     this.handwrittenSignatures = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -40391,9 +41891,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DotnetSettings.decode = function decode(reader, length, error) {
+                DotnetSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.DotnetSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -40401,7 +41905,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
@@ -40420,10 +41924,12 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedServices, key);
                                 message.renamedServices[key] = value;
                                 break;
                             }
@@ -40443,10 +41949,12 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedResources, key);
                                 message.renamedResources[key] = value;
                                 break;
                             }
@@ -40469,7 +41977,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -40500,11 +42008,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DotnetSettings.verify = function verify(message) {
+                DotnetSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -40556,28 +42068,38 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.DotnetSettings} DotnetSettings
                  */
-                DotnetSettings.fromObject = function fromObject(object) {
+                DotnetSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.DotnetSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.DotnetSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.DotnetSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.renamedServices) {
                         if (typeof object.renamedServices !== "object")
                             throw TypeError(".google.api.DotnetSettings.renamedServices: object expected");
                         message.renamedServices = {};
-                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedServices, keys[i]);
                             message.renamedServices[keys[i]] = String(object.renamedServices[keys[i]]);
+                        }
                     }
                     if (object.renamedResources) {
                         if (typeof object.renamedResources !== "object")
                             throw TypeError(".google.api.DotnetSettings.renamedResources: object expected");
                         message.renamedResources = {};
-                        for (var keys = Object.keys(object.renamedResources), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedResources), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedResources, keys[i]);
                             message.renamedResources[keys[i]] = String(object.renamedResources[keys[i]]);
+                        }
                     }
                     if (object.ignoredResources) {
                         if (!Array.isArray(object.ignoredResources))
@@ -40632,13 +42154,19 @@
                     var keys2;
                     if (message.renamedServices && (keys2 = Object.keys(message.renamedServices)).length) {
                         object.renamedServices = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedServices, keys2[j]);
                             object.renamedServices[keys2[j]] = message.renamedServices[keys2[j]];
+                        }
                     }
                     if (message.renamedResources && (keys2 = Object.keys(message.renamedResources)).length) {
                         object.renamedResources = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedResources, keys2[j]);
                             object.renamedResources[keys2[j]] = message.renamedResources[keys2[j]];
+                        }
                     }
                     if (message.ignoredResources && message.ignoredResources.length) {
                         object.ignoredResources = [];
@@ -40707,7 +42235,7 @@
                 function RubySettings(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -40772,9 +42300,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                RubySettings.decode = function decode(reader, length, error) {
+                RubySettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.RubySettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -40782,11 +42314,11 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -40817,11 +42349,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                RubySettings.verify = function verify(message) {
+                RubySettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -40836,14 +42372,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.RubySettings} RubySettings
                  */
-                RubySettings.fromObject = function fromObject(object) {
+                RubySettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.RubySettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.RubySettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.RubySettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     return message;
                 };
@@ -40919,7 +42459,7 @@
                     this.renamedServices = {};
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -40995,9 +42535,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GoSettings.decode = function decode(reader, length, error) {
+                GoSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.GoSettings(), key, value;
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -41005,7 +42549,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32());
+                                message.common = $root.google.api.CommonLanguageSettings.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 2: {
@@ -41024,15 +42568,17 @@
                                         value = reader.string();
                                         break;
                                     default:
-                                        reader.skipType(tag2 & 7);
+                                        reader.skipType(tag2 & 7, long);
                                         break;
                                     }
                                 }
+                                if (key === "__proto__")
+                                    $util.makeProp(message.renamedServices, key);
                                 message.renamedServices[key] = value;
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -41063,11 +42609,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GoSettings.verify = function verify(message) {
+                GoSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.common != null && message.hasOwnProperty("common")) {
-                        var error = $root.google.api.CommonLanguageSettings.verify(message.common);
+                        var error = $root.google.api.CommonLanguageSettings.verify(message.common, long + 1);
                         if (error)
                             return "common." + error;
                     }
@@ -41090,21 +42640,28 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.GoSettings} GoSettings
                  */
-                GoSettings.fromObject = function fromObject(object) {
+                GoSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.GoSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.GoSettings();
                     if (object.common != null) {
                         if (typeof object.common !== "object")
                             throw TypeError(".google.api.GoSettings.common: object expected");
-                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common);
+                        message.common = $root.google.api.CommonLanguageSettings.fromObject(object.common, long + 1);
                     }
                     if (object.renamedServices) {
                         if (typeof object.renamedServices !== "object")
                             throw TypeError(".google.api.GoSettings.renamedServices: object expected");
                         message.renamedServices = {};
-                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i)
+                        for (var keys = Object.keys(object.renamedServices), i = 0; i < keys.length; ++i) {
+                            if (keys[i] === "__proto__")
+                                $util.makeProp(message.renamedServices, keys[i]);
                             message.renamedServices[keys[i]] = String(object.renamedServices[keys[i]]);
+                        }
                     }
                     return message;
                 };
@@ -41131,8 +42688,11 @@
                     var keys2;
                     if (message.renamedServices && (keys2 = Object.keys(message.renamedServices)).length) {
                         object.renamedServices = {};
-                        for (var j = 0; j < keys2.length; ++j)
+                        for (var j = 0; j < keys2.length; ++j) {
+                            if (keys2[j] === "__proto__")
+                                $util.makeProp(object.renamedServices, keys2[j]);
                             object.renamedServices[keys2[j]] = message.renamedServices[keys2[j]];
+                        }
                     }
                     return object;
                 };
@@ -41189,7 +42749,7 @@
                     this.autoPopulatedFields = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -41275,9 +42835,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodSettings.decode = function decode(reader, length, error) {
+                MethodSettings.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.MethodSettings();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -41289,7 +42853,7 @@
                                 break;
                             }
                         case 2: {
-                                message.longRunning = $root.google.api.MethodSettings.LongRunning.decode(reader, reader.uint32());
+                                message.longRunning = $root.google.api.MethodSettings.LongRunning.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -41299,7 +42863,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -41330,14 +42894,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodSettings.verify = function verify(message) {
+                MethodSettings.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.selector != null && message.hasOwnProperty("selector"))
                         if (!$util.isString(message.selector))
                             return "selector: string expected";
                     if (message.longRunning != null && message.hasOwnProperty("longRunning")) {
-                        var error = $root.google.api.MethodSettings.LongRunning.verify(message.longRunning);
+                        var error = $root.google.api.MethodSettings.LongRunning.verify(message.longRunning, long + 1);
                         if (error)
                             return "longRunning." + error;
                     }
@@ -41359,16 +42927,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.MethodSettings} MethodSettings
                  */
-                MethodSettings.fromObject = function fromObject(object) {
+                MethodSettings.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.MethodSettings)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.MethodSettings();
                     if (object.selector != null)
                         message.selector = String(object.selector);
                     if (object.longRunning != null) {
                         if (typeof object.longRunning !== "object")
                             throw TypeError(".google.api.MethodSettings.longRunning: object expected");
-                        message.longRunning = $root.google.api.MethodSettings.LongRunning.fromObject(object.longRunning);
+                        message.longRunning = $root.google.api.MethodSettings.LongRunning.fromObject(object.longRunning, long + 1);
                     }
                     if (object.autoPopulatedFields) {
                         if (!Array.isArray(object.autoPopulatedFields))
@@ -41460,7 +43032,7 @@
                     function LongRunning(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -41555,9 +43127,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    LongRunning.decode = function decode(reader, length, error) {
+                    LongRunning.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.MethodSettings.LongRunning();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -41565,7 +43141,7 @@
                                 break;
                             switch (tag >>> 3) {
                             case 1: {
-                                    message.initialPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.initialPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 2: {
@@ -41573,15 +43149,15 @@
                                     break;
                                 }
                             case 3: {
-                                    message.maxPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.maxPollDelay = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 4: {
-                                    message.totalPollTimeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                    message.totalPollTimeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -41612,11 +43188,15 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    LongRunning.verify = function verify(message) {
+                    LongRunning.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.initialPollDelay != null && message.hasOwnProperty("initialPollDelay")) {
-                            var error = $root.google.protobuf.Duration.verify(message.initialPollDelay);
+                            var error = $root.google.protobuf.Duration.verify(message.initialPollDelay, long + 1);
                             if (error)
                                 return "initialPollDelay." + error;
                         }
@@ -41624,12 +43204,12 @@
                             if (typeof message.pollDelayMultiplier !== "number")
                                 return "pollDelayMultiplier: number expected";
                         if (message.maxPollDelay != null && message.hasOwnProperty("maxPollDelay")) {
-                            var error = $root.google.protobuf.Duration.verify(message.maxPollDelay);
+                            var error = $root.google.protobuf.Duration.verify(message.maxPollDelay, long + 1);
                             if (error)
                                 return "maxPollDelay." + error;
                         }
                         if (message.totalPollTimeout != null && message.hasOwnProperty("totalPollTimeout")) {
-                            var error = $root.google.protobuf.Duration.verify(message.totalPollTimeout);
+                            var error = $root.google.protobuf.Duration.verify(message.totalPollTimeout, long + 1);
                             if (error)
                                 return "totalPollTimeout." + error;
                         }
@@ -41644,26 +43224,30 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.api.MethodSettings.LongRunning} LongRunning
                      */
-                    LongRunning.fromObject = function fromObject(object) {
+                    LongRunning.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.api.MethodSettings.LongRunning)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.api.MethodSettings.LongRunning();
                         if (object.initialPollDelay != null) {
                             if (typeof object.initialPollDelay !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.initialPollDelay: object expected");
-                            message.initialPollDelay = $root.google.protobuf.Duration.fromObject(object.initialPollDelay);
+                            message.initialPollDelay = $root.google.protobuf.Duration.fromObject(object.initialPollDelay, long + 1);
                         }
                         if (object.pollDelayMultiplier != null)
                             message.pollDelayMultiplier = Number(object.pollDelayMultiplier);
                         if (object.maxPollDelay != null) {
                             if (typeof object.maxPollDelay !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.maxPollDelay: object expected");
-                            message.maxPollDelay = $root.google.protobuf.Duration.fromObject(object.maxPollDelay);
+                            message.maxPollDelay = $root.google.protobuf.Duration.fromObject(object.maxPollDelay, long + 1);
                         }
                         if (object.totalPollTimeout != null) {
                             if (typeof object.totalPollTimeout !== "object")
                                 throw TypeError(".google.api.MethodSettings.LongRunning.totalPollTimeout: object expected");
-                            message.totalPollTimeout = $root.google.protobuf.Duration.fromObject(object.totalPollTimeout);
+                            message.totalPollTimeout = $root.google.protobuf.Duration.fromObject(object.totalPollTimeout, long + 1);
                         }
                         return message;
                     };
@@ -41794,7 +43378,7 @@
                     this.methods = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -41870,9 +43454,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                SelectiveGapicGeneration.decode = function decode(reader, length, error) {
+                SelectiveGapicGeneration.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.SelectiveGapicGeneration();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -41890,7 +43478,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -41921,9 +43509,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                SelectiveGapicGeneration.verify = function verify(message) {
+                SelectiveGapicGeneration.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.methods != null && message.hasOwnProperty("methods")) {
                         if (!Array.isArray(message.methods))
                             return "methods: array expected";
@@ -41945,9 +43537,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.SelectiveGapicGeneration} SelectiveGapicGeneration
                  */
-                SelectiveGapicGeneration.fromObject = function fromObject(object) {
+                SelectiveGapicGeneration.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.SelectiveGapicGeneration)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.SelectiveGapicGeneration();
                     if (object.methods) {
                         if (!Array.isArray(object.methods))
@@ -42099,7 +43695,7 @@
                     this.style = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -42229,9 +43825,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ResourceDescriptor.decode = function decode(reader, length, error) {
+                ResourceDescriptor.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceDescriptor();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -42276,7 +43876,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -42307,9 +43907,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ResourceDescriptor.verify = function verify(message) {
+                ResourceDescriptor.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type != null && message.hasOwnProperty("type"))
                         if (!$util.isString(message.type))
                             return "type: string expected";
@@ -42361,9 +43965,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ResourceDescriptor} ResourceDescriptor
                  */
-                ResourceDescriptor.fromObject = function fromObject(object) {
+                ResourceDescriptor.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ResourceDescriptor)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ResourceDescriptor();
                     if (object.type != null)
                         message.type = String(object.type);
@@ -42551,7 +44159,7 @@
                 function ResourceReference(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -42626,9 +44234,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ResourceReference.decode = function decode(reader, length, error) {
+                ResourceReference.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceReference();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -42644,7 +44256,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -42675,9 +44287,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ResourceReference.verify = function verify(message) {
+                ResourceReference.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type != null && message.hasOwnProperty("type"))
                         if (!$util.isString(message.type))
                             return "type: string expected";
@@ -42695,9 +44311,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.ResourceReference} ResourceReference
                  */
-                ResourceReference.fromObject = function fromObject(object) {
+                ResourceReference.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.ResourceReference)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.ResourceReference();
                     if (object.type != null)
                         message.type = String(object.type);
@@ -42780,7 +44400,7 @@
                     this.routingParameters = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -42846,9 +44466,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                RoutingRule.decode = function decode(reader, length, error) {
+                RoutingRule.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.RoutingRule();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -42858,11 +44482,11 @@
                         case 2: {
                                 if (!(message.routingParameters && message.routingParameters.length))
                                     message.routingParameters = [];
-                                message.routingParameters.push($root.google.api.RoutingParameter.decode(reader, reader.uint32()));
+                                message.routingParameters.push($root.google.api.RoutingParameter.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -42893,14 +44517,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                RoutingRule.verify = function verify(message) {
+                RoutingRule.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.routingParameters != null && message.hasOwnProperty("routingParameters")) {
                         if (!Array.isArray(message.routingParameters))
                             return "routingParameters: array expected";
                         for (var i = 0; i < message.routingParameters.length; ++i) {
-                            var error = $root.google.api.RoutingParameter.verify(message.routingParameters[i]);
+                            var error = $root.google.api.RoutingParameter.verify(message.routingParameters[i], long + 1);
                             if (error)
                                 return "routingParameters." + error;
                         }
@@ -42916,9 +44544,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.RoutingRule} RoutingRule
                  */
-                RoutingRule.fromObject = function fromObject(object) {
+                RoutingRule.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.RoutingRule)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.RoutingRule();
                     if (object.routingParameters) {
                         if (!Array.isArray(object.routingParameters))
@@ -42927,7 +44559,7 @@
                         for (var i = 0; i < object.routingParameters.length; ++i) {
                             if (typeof object.routingParameters[i] !== "object")
                                 throw TypeError(".google.api.RoutingRule.routingParameters: object expected");
-                            message.routingParameters[i] = $root.google.api.RoutingParameter.fromObject(object.routingParameters[i]);
+                            message.routingParameters[i] = $root.google.api.RoutingParameter.fromObject(object.routingParameters[i], long + 1);
                         }
                     }
                     return message;
@@ -43006,7 +44638,7 @@
                 function RoutingParameter(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -43081,9 +44713,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                RoutingParameter.decode = function decode(reader, length, error) {
+                RoutingParameter.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.RoutingParameter();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -43099,7 +44735,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -43130,9 +44766,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                RoutingParameter.verify = function verify(message) {
+                RoutingParameter.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.field != null && message.hasOwnProperty("field"))
                         if (!$util.isString(message.field))
                             return "field: string expected";
@@ -43150,9 +44790,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.api.RoutingParameter} RoutingParameter
                  */
-                RoutingParameter.fromObject = function fromObject(object) {
+                RoutingParameter.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.api.RoutingParameter)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.api.RoutingParameter();
                     if (object.field != null)
                         message.field = String(object.field);
@@ -43247,7 +44891,7 @@
                     this.file = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -43313,9 +44957,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileDescriptorSet.decode = function decode(reader, length, error) {
+                FileDescriptorSet.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorSet();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -43325,11 +44973,11 @@
                         case 1: {
                                 if (!(message.file && message.file.length))
                                     message.file = [];
-                                message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32()));
+                                message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -43360,14 +45008,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileDescriptorSet.verify = function verify(message) {
+                FileDescriptorSet.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.file != null && message.hasOwnProperty("file")) {
                         if (!Array.isArray(message.file))
                             return "file: array expected";
                         for (var i = 0; i < message.file.length; ++i) {
-                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i]);
+                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i], long + 1);
                             if (error)
                                 return "file." + error;
                         }
@@ -43383,9 +45035,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet
                  */
-                FileDescriptorSet.fromObject = function fromObject(object) {
+                FileDescriptorSet.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileDescriptorSet)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileDescriptorSet();
                     if (object.file) {
                         if (!Array.isArray(object.file))
@@ -43394,7 +45050,7 @@
                         for (var i = 0; i < object.file.length; ++i) {
                             if (typeof object.file[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorSet.file: object expected");
-                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i]);
+                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i], long + 1);
                         }
                     }
                     return message;
@@ -43527,7 +45183,7 @@
                     this.extension = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -43730,9 +45386,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileDescriptorProto.decode = function decode(reader, length, error) {
+                FileDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -43784,33 +45444,33 @@
                         case 4: {
                                 if (!(message.messageType && message.messageType.length))
                                     message.messageType = [];
-                                message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
+                                message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
                                 if (!(message.enumType && message.enumType.length))
                                     message.enumType = [];
-                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
+                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 6: {
                                 if (!(message.service && message.service.length))
                                     message.service = [];
-                                message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32()));
+                                message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 7: {
                                 if (!(message.extension && message.extension.length))
                                     message.extension = [];
-                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 8: {
-                                message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 9: {
-                                message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32());
+                                message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 12: {
@@ -43822,7 +45482,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -43853,9 +45513,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileDescriptorProto.verify = function verify(message) {
+                FileDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -43894,7 +45558,7 @@
                         if (!Array.isArray(message.messageType))
                             return "messageType: array expected";
                         for (var i = 0; i < message.messageType.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i]);
+                            var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i], long + 1);
                             if (error)
                                 return "messageType." + error;
                         }
@@ -43903,7 +45567,7 @@
                         if (!Array.isArray(message.enumType))
                             return "enumType: array expected";
                         for (var i = 0; i < message.enumType.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i], long + 1);
                             if (error)
                                 return "enumType." + error;
                         }
@@ -43912,7 +45576,7 @@
                         if (!Array.isArray(message.service))
                             return "service: array expected";
                         for (var i = 0; i < message.service.length; ++i) {
-                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i]);
+                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i], long + 1);
                             if (error)
                                 return "service." + error;
                         }
@@ -43921,18 +45585,18 @@
                         if (!Array.isArray(message.extension))
                             return "extension: array expected";
                         for (var i = 0; i < message.extension.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i], long + 1);
                             if (error)
                                 return "extension." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.FileOptions.verify(message.options);
+                        var error = $root.google.protobuf.FileOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
                     if (message.sourceCodeInfo != null && message.hasOwnProperty("sourceCodeInfo")) {
-                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo);
+                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo, long + 1);
                         if (error)
                             return "sourceCodeInfo." + error;
                     }
@@ -43968,9 +45632,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto
                  */
-                FileDescriptorProto.fromObject = function fromObject(object) {
+                FileDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -44011,7 +45679,7 @@
                         for (var i = 0; i < object.messageType.length; ++i) {
                             if (typeof object.messageType[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.messageType: object expected");
-                            message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i]);
+                            message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i], long + 1);
                         }
                     }
                     if (object.enumType) {
@@ -44021,7 +45689,7 @@
                         for (var i = 0; i < object.enumType.length; ++i) {
                             if (typeof object.enumType[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.enumType: object expected");
-                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]);
+                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i], long + 1);
                         }
                     }
                     if (object.service) {
@@ -44031,7 +45699,7 @@
                         for (var i = 0; i < object.service.length; ++i) {
                             if (typeof object.service[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.service: object expected");
-                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i]);
+                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i], long + 1);
                         }
                     }
                     if (object.extension) {
@@ -44041,18 +45709,18 @@
                         for (var i = 0; i < object.extension.length; ++i) {
                             if (typeof object.extension[i] !== "object")
                                 throw TypeError(".google.protobuf.FileDescriptorProto.extension: object expected");
-                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
+                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.FileDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options, long + 1);
                     }
                     if (object.sourceCodeInfo != null) {
                         if (typeof object.sourceCodeInfo !== "object")
                             throw TypeError(".google.protobuf.FileDescriptorProto.sourceCodeInfo: object expected");
-                        message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo);
+                        message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo, long + 1);
                     }
                     if (object.syntax != null)
                         message.syntax = String(object.syntax);
@@ -44268,7 +45936,7 @@
                     this.reservedName = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -44441,9 +46109,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DescriptorProto.decode = function decode(reader, length, error) {
+                DescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -44457,47 +46129,47 @@
                         case 2: {
                                 if (!(message.field && message.field.length))
                                     message.field = [];
-                                message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 6: {
                                 if (!(message.extension && message.extension.length))
                                     message.extension = [];
-                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
+                                message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
                                 if (!(message.nestedType && message.nestedType.length))
                                     message.nestedType = [];
-                                message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
+                                message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 4: {
                                 if (!(message.enumType && message.enumType.length))
                                     message.enumType = [];
-                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
+                                message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
                                 if (!(message.extensionRange && message.extensionRange.length))
                                     message.extensionRange = [];
-                                message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32()));
+                                message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 8: {
                                 if (!(message.oneofDecl && message.oneofDecl.length))
                                     message.oneofDecl = [];
-                                message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32()));
+                                message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 7: {
-                                message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 9: {
                                 if (!(message.reservedRange && message.reservedRange.length))
                                     message.reservedRange = [];
-                                message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32()));
+                                message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 10: {
@@ -44511,7 +46183,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -44542,9 +46214,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DescriptorProto.verify = function verify(message) {
+                DescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -44552,7 +46228,7 @@
                         if (!Array.isArray(message.field))
                             return "field: array expected";
                         for (var i = 0; i < message.field.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i], long + 1);
                             if (error)
                                 return "field." + error;
                         }
@@ -44561,7 +46237,7 @@
                         if (!Array.isArray(message.extension))
                             return "extension: array expected";
                         for (var i = 0; i < message.extension.length; ++i) {
-                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
+                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i], long + 1);
                             if (error)
                                 return "extension." + error;
                         }
@@ -44570,7 +46246,7 @@
                         if (!Array.isArray(message.nestedType))
                             return "nestedType: array expected";
                         for (var i = 0; i < message.nestedType.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i]);
+                            var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i], long + 1);
                             if (error)
                                 return "nestedType." + error;
                         }
@@ -44579,7 +46255,7 @@
                         if (!Array.isArray(message.enumType))
                             return "enumType: array expected";
                         for (var i = 0; i < message.enumType.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i], long + 1);
                             if (error)
                                 return "enumType." + error;
                         }
@@ -44588,7 +46264,7 @@
                         if (!Array.isArray(message.extensionRange))
                             return "extensionRange: array expected";
                         for (var i = 0; i < message.extensionRange.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i]);
+                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i], long + 1);
                             if (error)
                                 return "extensionRange." + error;
                         }
@@ -44597,13 +46273,13 @@
                         if (!Array.isArray(message.oneofDecl))
                             return "oneofDecl: array expected";
                         for (var i = 0; i < message.oneofDecl.length; ++i) {
-                            var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i]);
+                            var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i], long + 1);
                             if (error)
                                 return "oneofDecl." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.MessageOptions.verify(message.options);
+                        var error = $root.google.protobuf.MessageOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -44611,7 +46287,7 @@
                         if (!Array.isArray(message.reservedRange))
                             return "reservedRange: array expected";
                         for (var i = 0; i < message.reservedRange.length; ++i) {
-                            var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i]);
+                            var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i], long + 1);
                             if (error)
                                 return "reservedRange." + error;
                         }
@@ -44643,9 +46319,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.DescriptorProto} DescriptorProto
                  */
-                DescriptorProto.fromObject = function fromObject(object) {
+                DescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.DescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.DescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -44656,7 +46336,7 @@
                         for (var i = 0; i < object.field.length; ++i) {
                             if (typeof object.field[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.field: object expected");
-                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i]);
+                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i], long + 1);
                         }
                     }
                     if (object.extension) {
@@ -44666,7 +46346,7 @@
                         for (var i = 0; i < object.extension.length; ++i) {
                             if (typeof object.extension[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.extension: object expected");
-                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
+                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i], long + 1);
                         }
                     }
                     if (object.nestedType) {
@@ -44676,7 +46356,7 @@
                         for (var i = 0; i < object.nestedType.length; ++i) {
                             if (typeof object.nestedType[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.nestedType: object expected");
-                            message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i]);
+                            message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i], long + 1);
                         }
                     }
                     if (object.enumType) {
@@ -44686,7 +46366,7 @@
                         for (var i = 0; i < object.enumType.length; ++i) {
                             if (typeof object.enumType[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.enumType: object expected");
-                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]);
+                            message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i], long + 1);
                         }
                     }
                     if (object.extensionRange) {
@@ -44696,7 +46376,7 @@
                         for (var i = 0; i < object.extensionRange.length; ++i) {
                             if (typeof object.extensionRange[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.extensionRange: object expected");
-                            message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i]);
+                            message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i], long + 1);
                         }
                     }
                     if (object.oneofDecl) {
@@ -44706,13 +46386,13 @@
                         for (var i = 0; i < object.oneofDecl.length; ++i) {
                             if (typeof object.oneofDecl[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.oneofDecl: object expected");
-                            message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i]);
+                            message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.DescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options, long + 1);
                     }
                     if (object.reservedRange) {
                         if (!Array.isArray(object.reservedRange))
@@ -44721,7 +46401,7 @@
                         for (var i = 0; i < object.reservedRange.length; ++i) {
                             if (typeof object.reservedRange[i] !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.reservedRange: object expected");
-                            message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i]);
+                            message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i], long + 1);
                         }
                     }
                     if (object.reservedName) {
@@ -44879,7 +46559,7 @@
                     function ExtensionRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -44964,9 +46644,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ExtensionRange.decode = function decode(reader, length, error) {
+                    ExtensionRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -44982,11 +46666,11 @@
                                     break;
                                 }
                             case 3: {
-                                    message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32());
+                                    message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -45017,9 +46701,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ExtensionRange.verify = function verify(message) {
+                    ExtensionRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -45027,7 +46715,7 @@
                             if (!$util.isInteger(message.end))
                                 return "end: integer expected";
                         if (message.options != null && message.hasOwnProperty("options")) {
-                            var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options);
+                            var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options, long + 1);
                             if (error)
                                 return "options." + error;
                         }
@@ -45042,9 +46730,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange
                      */
-                    ExtensionRange.fromObject = function fromObject(object) {
+                    ExtensionRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.DescriptorProto.ExtensionRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -45053,7 +46745,7 @@
                         if (object.options != null) {
                             if (typeof object.options !== "object")
                                 throw TypeError(".google.protobuf.DescriptorProto.ExtensionRange.options: object expected");
-                            message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options);
+                            message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options, long + 1);
                         }
                         return message;
                     };
@@ -45135,7 +46827,7 @@
                     function ReservedRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -45210,9 +46902,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    ReservedRange.decode = function decode(reader, length, error) {
+                    ReservedRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ReservedRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -45228,7 +46924,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -45259,9 +46955,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    ReservedRange.verify = function verify(message) {
+                    ReservedRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -45279,9 +46979,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange
                      */
-                    ReservedRange.fromObject = function fromObject(object) {
+                    ReservedRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.DescriptorProto.ReservedRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.DescriptorProto.ReservedRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -45371,7 +47075,7 @@
                     this.declaration = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -45468,9 +47172,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ExtensionRangeOptions.decode = function decode(reader, length, error) {
+                ExtensionRangeOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -45480,17 +47188,17 @@
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
                                 if (!(message.declaration && message.declaration.length))
                                     message.declaration = [];
-                                message.declaration.push($root.google.protobuf.ExtensionRangeOptions.Declaration.decode(reader, reader.uint32()));
+                                message.declaration.push($root.google.protobuf.ExtensionRangeOptions.Declaration.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 50: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -45498,7 +47206,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -45529,14 +47237,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ExtensionRangeOptions.verify = function verify(message) {
+                ExtensionRangeOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) {
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -45545,13 +47257,13 @@
                         if (!Array.isArray(message.declaration))
                             return "declaration: array expected";
                         for (var i = 0; i < message.declaration.length; ++i) {
-                            var error = $root.google.protobuf.ExtensionRangeOptions.Declaration.verify(message.declaration[i]);
+                            var error = $root.google.protobuf.ExtensionRangeOptions.Declaration.verify(message.declaration[i], long + 1);
                             if (error)
                                 return "declaration." + error;
                         }
                     }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -45574,9 +47286,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions
                  */
-                ExtensionRangeOptions.fromObject = function fromObject(object) {
+                ExtensionRangeOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ExtensionRangeOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ExtensionRangeOptions();
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -45585,7 +47301,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.ExtensionRangeOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object.declaration) {
@@ -45595,13 +47311,13 @@
                         for (var i = 0; i < object.declaration.length; ++i) {
                             if (typeof object.declaration[i] !== "object")
                                 throw TypeError(".google.protobuf.ExtensionRangeOptions.declaration: object expected");
-                            message.declaration[i] = $root.google.protobuf.ExtensionRangeOptions.Declaration.fromObject(object.declaration[i]);
+                            message.declaration[i] = $root.google.protobuf.ExtensionRangeOptions.Declaration.fromObject(object.declaration[i], long + 1);
                         }
                     }
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.ExtensionRangeOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     switch (object.verification) {
                     case "DECLARATION":
@@ -45710,7 +47426,7 @@
                     function Declaration(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -45815,9 +47531,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Declaration.decode = function decode(reader, length, error) {
+                    Declaration.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions.Declaration();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -45845,7 +47565,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -45876,9 +47596,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Declaration.verify = function verify(message) {
+                    Declaration.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.number != null && message.hasOwnProperty("number"))
                             if (!$util.isInteger(message.number))
                                 return "number: integer expected";
@@ -45905,9 +47629,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.ExtensionRangeOptions.Declaration} Declaration
                      */
-                    Declaration.fromObject = function fromObject(object) {
+                    Declaration.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.ExtensionRangeOptions.Declaration)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.ExtensionRangeOptions.Declaration();
                         if (object.number != null)
                             message.number = object.number | 0;
@@ -46031,7 +47759,7 @@
                 function FieldDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -46196,9 +47924,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldDescriptorProto.decode = function decode(reader, length, error) {
+                FieldDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -46242,7 +47974,7 @@
                                 break;
                             }
                         case 8: {
-                                message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 17: {
@@ -46250,7 +47982,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -46281,9 +48013,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldDescriptorProto.verify = function verify(message) {
+                FieldDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -46339,7 +48075,7 @@
                         if (!$util.isString(message.jsonName))
                             return "jsonName: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.FieldOptions.verify(message.options);
+                        var error = $root.google.protobuf.FieldOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -46357,9 +48093,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto
                  */
-                FieldDescriptorProto.fromObject = function fromObject(object) {
+                FieldDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -46478,7 +48218,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.FieldDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options, long + 1);
                     }
                     if (object.proto3Optional != null)
                         message.proto3Optional = Boolean(object.proto3Optional);
@@ -46648,7 +48388,7 @@
                 function OneofDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -46723,9 +48463,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OneofDescriptorProto.decode = function decode(reader, length, error) {
+                OneofDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -46737,11 +48481,11 @@
                                 break;
                             }
                         case 2: {
-                                message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -46772,14 +48516,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OneofDescriptorProto.verify = function verify(message) {
+                OneofDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.OneofOptions.verify(message.options);
+                        var error = $root.google.protobuf.OneofOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -46794,16 +48542,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto
                  */
-                OneofDescriptorProto.fromObject = function fromObject(object) {
+                OneofDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.OneofDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.OneofDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.OneofDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.OneofOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.OneofOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -46889,7 +48641,7 @@
                     this.reservedName = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -47007,9 +48759,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumDescriptorProto.decode = function decode(reader, length, error) {
+                EnumDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -47023,17 +48779,17 @@
                         case 2: {
                                 if (!(message.value && message.value.length))
                                     message.value = [];
-                                message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32()));
+                                message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 4: {
                                 if (!(message.reservedRange && message.reservedRange.length))
                                     message.reservedRange = [];
-                                message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32()));
+                                message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 5: {
@@ -47047,7 +48803,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -47078,9 +48834,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumDescriptorProto.verify = function verify(message) {
+                EnumDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -47088,13 +48848,13 @@
                         if (!Array.isArray(message.value))
                             return "value: array expected";
                         for (var i = 0; i < message.value.length; ++i) {
-                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i]);
+                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i], long + 1);
                             if (error)
                                 return "value." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.EnumOptions.verify(message.options);
+                        var error = $root.google.protobuf.EnumOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -47102,7 +48862,7 @@
                         if (!Array.isArray(message.reservedRange))
                             return "reservedRange: array expected";
                         for (var i = 0; i < message.reservedRange.length; ++i) {
-                            var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i]);
+                            var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i], long + 1);
                             if (error)
                                 return "reservedRange." + error;
                         }
@@ -47134,9 +48894,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto
                  */
-                EnumDescriptorProto.fromObject = function fromObject(object) {
+                EnumDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -47147,13 +48911,13 @@
                         for (var i = 0; i < object.value.length; ++i) {
                             if (typeof object.value[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumDescriptorProto.value: object expected");
-                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i]);
+                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.EnumDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options, long + 1);
                     }
                     if (object.reservedRange) {
                         if (!Array.isArray(object.reservedRange))
@@ -47162,7 +48926,7 @@
                         for (var i = 0; i < object.reservedRange.length; ++i) {
                             if (typeof object.reservedRange[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumDescriptorProto.reservedRange: object expected");
-                            message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i]);
+                            message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i], long + 1);
                         }
                     }
                     if (object.reservedName) {
@@ -47289,7 +49053,7 @@
                     function EnumReservedRange(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -47364,9 +49128,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    EnumReservedRange.decode = function decode(reader, length, error) {
+                    EnumReservedRange.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -47382,7 +49150,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -47413,9 +49181,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    EnumReservedRange.verify = function verify(message) {
+                    EnumReservedRange.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.start != null && message.hasOwnProperty("start"))
                             if (!$util.isInteger(message.start))
                                 return "start: integer expected";
@@ -47433,9 +49205,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange
                      */
-                    EnumReservedRange.fromObject = function fromObject(object) {
+                    EnumReservedRange.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.EnumDescriptorProto.EnumReservedRange)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange();
                         if (object.start != null)
                             message.start = object.start | 0;
@@ -47522,7 +49298,7 @@
                 function EnumValueDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -47607,9 +49383,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumValueDescriptorProto.decode = function decode(reader, length, error) {
+                EnumValueDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -47625,11 +49405,11 @@
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -47660,9 +49440,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumValueDescriptorProto.verify = function verify(message) {
+                EnumValueDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -47670,7 +49454,7 @@
                         if (!$util.isInteger(message.number))
                             return "number: integer expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options);
+                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -47685,9 +49469,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto
                  */
-                EnumValueDescriptorProto.fromObject = function fromObject(object) {
+                EnumValueDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumValueDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumValueDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -47696,7 +49484,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.EnumValueDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -47780,7 +49568,7 @@
                     this.method = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -47866,9 +49654,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ServiceDescriptorProto.decode = function decode(reader, length, error) {
+                ServiceDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -47882,15 +49674,15 @@
                         case 2: {
                                 if (!(message.method && message.method.length))
                                     message.method = [];
-                                message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32()));
+                                message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
-                                message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -47921,9 +49713,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ServiceDescriptorProto.verify = function verify(message) {
+                ServiceDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -47931,13 +49727,13 @@
                         if (!Array.isArray(message.method))
                             return "method: array expected";
                         for (var i = 0; i < message.method.length; ++i) {
-                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i]);
+                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i], long + 1);
                             if (error)
                                 return "method." + error;
                         }
                     }
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.ServiceOptions.verify(message.options);
+                        var error = $root.google.protobuf.ServiceOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -47952,9 +49748,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto
                  */
-                ServiceDescriptorProto.fromObject = function fromObject(object) {
+                ServiceDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ServiceDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ServiceDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -47965,13 +49765,13 @@
                         for (var i = 0; i < object.method.length; ++i) {
                             if (typeof object.method[i] !== "object")
                                 throw TypeError(".google.protobuf.ServiceDescriptorProto.method: object expected");
-                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i]);
+                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i], long + 1);
                         }
                     }
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.ServiceDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options, long + 1);
                     }
                     return message;
                 };
@@ -48061,7 +49861,7 @@
                 function MethodDescriptorProto(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -48176,9 +49976,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodDescriptorProto.decode = function decode(reader, length, error) {
+                MethodDescriptorProto.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodDescriptorProto();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -48198,7 +50002,7 @@
                                 break;
                             }
                         case 4: {
-                                message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32());
+                                message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 5: {
@@ -48210,7 +50014,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -48241,9 +50045,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodDescriptorProto.verify = function verify(message) {
+                MethodDescriptorProto.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -48254,7 +50062,7 @@
                         if (!$util.isString(message.outputType))
                             return "outputType: string expected";
                     if (message.options != null && message.hasOwnProperty("options")) {
-                        var error = $root.google.protobuf.MethodOptions.verify(message.options);
+                        var error = $root.google.protobuf.MethodOptions.verify(message.options, long + 1);
                         if (error)
                             return "options." + error;
                     }
@@ -48275,9 +50083,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto
                  */
-                MethodDescriptorProto.fromObject = function fromObject(object) {
+                MethodDescriptorProto.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MethodDescriptorProto)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MethodDescriptorProto();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -48288,7 +50100,7 @@
                     if (object.options != null) {
                         if (typeof object.options !== "object")
                             throw TypeError(".google.protobuf.MethodDescriptorProto.options: object expected");
-                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options);
+                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options, long + 1);
                     }
                     if (object.clientStreaming != null)
                         message.clientStreaming = Boolean(object.clientStreaming);
@@ -48405,7 +50217,7 @@
                     this[".google.api.resourceDefinition"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -48682,9 +50494,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FileOptions.decode = function decode(reader, length, error) {
+                FileOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -48768,23 +50584,23 @@
                                 break;
                             }
                         case 50: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1053: {
                                 if (!(message[".google.api.resourceDefinition"] && message[".google.api.resourceDefinition"].length))
                                     message[".google.api.resourceDefinition"] = [];
-                                message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32()));
+                                message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -48815,9 +50631,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FileOptions.verify = function verify(message) {
+                FileOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.javaPackage != null && message.hasOwnProperty("javaPackage"))
                         if (!$util.isString(message.javaPackage))
                             return "javaPackage: string expected";
@@ -48882,7 +50702,7 @@
                         if (!$util.isString(message.rubyPackage))
                             return "rubyPackage: string expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -48890,7 +50710,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -48899,7 +50719,7 @@
                         if (!Array.isArray(message[".google.api.resourceDefinition"]))
                             return ".google.api.resourceDefinition: array expected";
                         for (var i = 0; i < message[".google.api.resourceDefinition"].length; ++i) {
-                            var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i]);
+                            var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i], long + 1);
                             if (error)
                                 return ".google.api.resourceDefinition." + error;
                         }
@@ -48915,9 +50735,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FileOptions} FileOptions
                  */
-                FileOptions.fromObject = function fromObject(object) {
+                FileOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FileOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FileOptions();
                     if (object.javaPackage != null)
                         message.javaPackage = String(object.javaPackage);
@@ -48978,7 +50802,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.FileOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -48987,7 +50811,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.FileOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.resourceDefinition"]) {
@@ -48997,7 +50821,7 @@
                         for (var i = 0; i < object[".google.api.resourceDefinition"].length; ++i) {
                             if (typeof object[".google.api.resourceDefinition"][i] !== "object")
                                 throw TypeError(".google.protobuf.FileOptions..google.api.resourceDefinition: object expected");
-                            message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i]);
+                            message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i], long + 1);
                         }
                     }
                     return message;
@@ -49168,7 +50992,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -49304,9 +51128,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MessageOptions.decode = function decode(reader, length, error) {
+                MessageOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MessageOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -49334,21 +51162,21 @@
                                 break;
                             }
                         case 12: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1053: {
-                                message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32());
+                                message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -49379,9 +51207,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MessageOptions.verify = function verify(message) {
+                MessageOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.messageSetWireFormat != null && message.hasOwnProperty("messageSetWireFormat"))
                         if (typeof message.messageSetWireFormat !== "boolean")
                             return "messageSetWireFormat: boolean expected";
@@ -49398,7 +51230,7 @@
                         if (typeof message.deprecatedLegacyJsonFieldConflicts !== "boolean")
                             return "deprecatedLegacyJsonFieldConflicts: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -49406,13 +51238,13 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
                     }
                     if (message[".google.api.resource"] != null && message.hasOwnProperty(".google.api.resource")) {
-                        var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"]);
+                        var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"], long + 1);
                         if (error)
                             return ".google.api.resource." + error;
                     }
@@ -49427,9 +51259,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MessageOptions} MessageOptions
                  */
-                MessageOptions.fromObject = function fromObject(object) {
+                MessageOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MessageOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MessageOptions();
                     if (object.messageSetWireFormat != null)
                         message.messageSetWireFormat = Boolean(object.messageSetWireFormat);
@@ -49444,7 +51280,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.MessageOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -49453,13 +51289,13 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.MessageOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.resource"] != null) {
                         if (typeof object[".google.api.resource"] !== "object")
                             throw TypeError(".google.protobuf.MessageOptions..google.api.resource: object expected");
-                        message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"]);
+                        message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"], long + 1);
                     }
                     return message;
                 };
@@ -49578,7 +51414,7 @@
                     this[".google.api.fieldBehavior"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -49797,9 +51633,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldOptions.decode = function decode(reader, length, error) {
+                FieldOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -49856,21 +51696,21 @@
                         case 20: {
                                 if (!(message.editionDefaults && message.editionDefaults.length))
                                     message.editionDefaults = [];
-                                message.editionDefaults.push($root.google.protobuf.FieldOptions.EditionDefault.decode(reader, reader.uint32()));
+                                message.editionDefaults.push($root.google.protobuf.FieldOptions.EditionDefault.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 21: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 22: {
-                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32());
+                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1052: {
@@ -49885,11 +51725,11 @@
                                 break;
                             }
                         case 1055: {
-                                message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32());
+                                message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -49920,9 +51760,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldOptions.verify = function verify(message) {
+                FieldOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.ctype != null && message.hasOwnProperty("ctype"))
                         switch (message.ctype) {
                         default:
@@ -49992,18 +51836,18 @@
                         if (!Array.isArray(message.editionDefaults))
                             return "editionDefaults: array expected";
                         for (var i = 0; i < message.editionDefaults.length; ++i) {
-                            var error = $root.google.protobuf.FieldOptions.EditionDefault.verify(message.editionDefaults[i]);
+                            var error = $root.google.protobuf.FieldOptions.EditionDefault.verify(message.editionDefaults[i], long + 1);
                             if (error)
                                 return "editionDefaults." + error;
                         }
                     }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
                     if (message.featureSupport != null && message.hasOwnProperty("featureSupport")) {
-                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport);
+                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport, long + 1);
                         if (error)
                             return "featureSupport." + error;
                     }
@@ -50011,7 +51855,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -50036,7 +51880,7 @@
                             }
                     }
                     if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) {
-                        var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"]);
+                        var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"], long + 1);
                         if (error)
                             return ".google.api.resourceReference." + error;
                     }
@@ -50051,9 +51895,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldOptions} FieldOptions
                  */
-                FieldOptions.fromObject = function fromObject(object) {
+                FieldOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldOptions();
                     switch (object.ctype) {
                     default:
@@ -50187,18 +52035,18 @@
                         for (var i = 0; i < object.editionDefaults.length; ++i) {
                             if (typeof object.editionDefaults[i] !== "object")
                                 throw TypeError(".google.protobuf.FieldOptions.editionDefaults: object expected");
-                            message.editionDefaults[i] = $root.google.protobuf.FieldOptions.EditionDefault.fromObject(object.editionDefaults[i]);
+                            message.editionDefaults[i] = $root.google.protobuf.FieldOptions.EditionDefault.fromObject(object.editionDefaults[i], long + 1);
                         }
                     }
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.FieldOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.featureSupport != null) {
                         if (typeof object.featureSupport !== "object")
                             throw TypeError(".google.protobuf.FieldOptions.featureSupport: object expected");
-                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport);
+                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -50207,7 +52055,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.FieldOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.fieldBehavior"]) {
@@ -50262,7 +52110,7 @@
                     if (object[".google.api.resourceReference"] != null) {
                         if (typeof object[".google.api.resourceReference"] !== "object")
                             throw TypeError(".google.protobuf.FieldOptions..google.api.resourceReference: object expected");
-                        message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"]);
+                        message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"], long + 1);
                     }
                     return message;
                 };
@@ -50472,7 +52320,7 @@
                     function EditionDefault(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -50547,9 +52395,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    EditionDefault.decode = function decode(reader, length, error) {
+                    EditionDefault.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions.EditionDefault();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -50565,7 +52417,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -50596,9 +52448,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    EditionDefault.verify = function verify(message) {
+                    EditionDefault.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.edition != null && message.hasOwnProperty("edition"))
                             switch (message.edition) {
                             default:
@@ -50631,9 +52487,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FieldOptions.EditionDefault} EditionDefault
                      */
-                    EditionDefault.fromObject = function fromObject(object) {
+                    EditionDefault.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FieldOptions.EditionDefault)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FieldOptions.EditionDefault();
                         switch (object.edition) {
                         default:
@@ -50772,7 +52632,7 @@
                     function FeatureSupport(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -50867,9 +52727,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    FeatureSupport.decode = function decode(reader, length, error) {
+                    FeatureSupport.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions.FeatureSupport();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -50893,7 +52757,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -50924,9 +52788,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    FeatureSupport.verify = function verify(message) {
+                    FeatureSupport.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.editionIntroduced != null && message.hasOwnProperty("editionIntroduced"))
                             switch (message.editionIntroduced) {
                             default:
@@ -50995,9 +52863,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FieldOptions.FeatureSupport} FeatureSupport
                      */
-                    FeatureSupport.fromObject = function fromObject(object) {
+                    FeatureSupport.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FieldOptions.FeatureSupport)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FieldOptions.FeatureSupport();
                         switch (object.editionIntroduced) {
                         default:
@@ -51256,7 +53128,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -51332,9 +53204,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OneofOptions.decode = function decode(reader, length, error) {
+                OneofOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -51342,17 +53218,17 @@
                             break;
                         switch (tag >>> 3) {
                         case 1: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -51383,11 +53259,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OneofOptions.verify = function verify(message) {
+                OneofOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -51395,7 +53275,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -51411,14 +53291,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.OneofOptions} OneofOptions
                  */
-                OneofOptions.fromObject = function fromObject(object) {
+                OneofOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.OneofOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.OneofOptions();
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.OneofOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -51427,7 +53311,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.OneofOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -51514,7 +53398,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -51620,9 +53504,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumOptions.decode = function decode(reader, length, error) {
+                EnumOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -51642,17 +53530,17 @@
                                 break;
                             }
                         case 7: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -51683,9 +53571,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumOptions.verify = function verify(message) {
+                EnumOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.allowAlias != null && message.hasOwnProperty("allowAlias"))
                         if (typeof message.allowAlias !== "boolean")
                             return "allowAlias: boolean expected";
@@ -51696,7 +53588,7 @@
                         if (typeof message.deprecatedLegacyJsonFieldConflicts !== "boolean")
                             return "deprecatedLegacyJsonFieldConflicts: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -51704,7 +53596,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -51720,9 +53612,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumOptions} EnumOptions
                  */
-                EnumOptions.fromObject = function fromObject(object) {
+                EnumOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumOptions();
                     if (object.allowAlias != null)
                         message.allowAlias = Boolean(object.allowAlias);
@@ -51733,7 +53629,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.EnumOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -51742,7 +53638,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -51839,7 +53735,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -51945,9 +53841,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                EnumValueOptions.decode = function decode(reader, length, error) {
+                EnumValueOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -51959,7 +53859,7 @@
                                 break;
                             }
                         case 2: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -51967,17 +53867,17 @@
                                 break;
                             }
                         case 4: {
-                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32());
+                                message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -52008,14 +53908,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                EnumValueOptions.verify = function verify(message) {
+                EnumValueOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                         if (typeof message.deprecated !== "boolean")
                             return "deprecated: boolean expected";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -52023,7 +53927,7 @@
                         if (typeof message.debugRedact !== "boolean")
                             return "debugRedact: boolean expected";
                     if (message.featureSupport != null && message.hasOwnProperty("featureSupport")) {
-                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport);
+                        var error = $root.google.protobuf.FieldOptions.FeatureSupport.verify(message.featureSupport, long + 1);
                         if (error)
                             return "featureSupport." + error;
                     }
@@ -52031,7 +53935,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -52047,23 +53951,27 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.EnumValueOptions} EnumValueOptions
                  */
-                EnumValueOptions.fromObject = function fromObject(object) {
+                EnumValueOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.EnumValueOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.EnumValueOptions();
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.EnumValueOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.debugRedact != null)
                         message.debugRedact = Boolean(object.debugRedact);
                     if (object.featureSupport != null) {
                         if (typeof object.featureSupport !== "object")
                             throw TypeError(".google.protobuf.EnumValueOptions.featureSupport: object expected");
-                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport);
+                        message.featureSupport = $root.google.protobuf.FieldOptions.FeatureSupport.fromObject(object.featureSupport, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -52072,7 +53980,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.EnumValueOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     return message;
@@ -52170,7 +54078,7 @@
                     this.uninterpretedOption = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -52286,9 +54194,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ServiceOptions.decode = function decode(reader, length, error) {
+                ServiceOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -52296,7 +54208,7 @@
                             break;
                         switch (tag >>> 3) {
                         case 34: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 33: {
@@ -52306,7 +54218,7 @@
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 1049: {
@@ -52322,7 +54234,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -52353,11 +54265,15 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ServiceOptions.verify = function verify(message) {
+                ServiceOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -52368,7 +54284,7 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
@@ -52393,14 +54309,18 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.ServiceOptions} ServiceOptions
                  */
-                ServiceOptions.fromObject = function fromObject(object) {
+                ServiceOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.ServiceOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.ServiceOptions();
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.ServiceOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
@@ -52411,7 +54331,7 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.ServiceOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.defaultHost"] != null)
@@ -52521,7 +54441,7 @@
                     this[".google.api.methodSignature"] = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -52658,9 +54578,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                MethodOptions.decode = function decode(reader, length, error) {
+                MethodOptions.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodOptions();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -52676,17 +54600,17 @@
                                 break;
                             }
                         case 35: {
-                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                message.features = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 999: {
                                 if (!(message.uninterpretedOption && message.uninterpretedOption.length))
                                     message.uninterpretedOption = [];
-                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
+                                message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 72295728: {
-                                message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32());
+                                message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 1051: {
@@ -52696,15 +54620,15 @@
                                 break;
                             }
                         case 72295729: {
-                                message[".google.api.routing"] = $root.google.api.RoutingRule.decode(reader, reader.uint32());
+                                message[".google.api.routing"] = $root.google.api.RoutingRule.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 1049: {
-                                message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32());
+                                message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -52735,9 +54659,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                MethodOptions.verify = function verify(message) {
+                MethodOptions.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                         if (typeof message.deprecated !== "boolean")
                             return "deprecated: boolean expected";
@@ -52751,7 +54679,7 @@
                             break;
                         }
                     if (message.features != null && message.hasOwnProperty("features")) {
-                        var error = $root.google.protobuf.FeatureSet.verify(message.features);
+                        var error = $root.google.protobuf.FeatureSet.verify(message.features, long + 1);
                         if (error)
                             return "features." + error;
                     }
@@ -52759,13 +54687,13 @@
                         if (!Array.isArray(message.uninterpretedOption))
                             return "uninterpretedOption: array expected";
                         for (var i = 0; i < message.uninterpretedOption.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i], long + 1);
                             if (error)
                                 return "uninterpretedOption." + error;
                         }
                     }
                     if (message[".google.api.http"] != null && message.hasOwnProperty(".google.api.http")) {
-                        var error = $root.google.api.HttpRule.verify(message[".google.api.http"]);
+                        var error = $root.google.api.HttpRule.verify(message[".google.api.http"], long + 1);
                         if (error)
                             return ".google.api.http." + error;
                     }
@@ -52777,12 +54705,12 @@
                                 return ".google.api.methodSignature: string[] expected";
                     }
                     if (message[".google.api.routing"] != null && message.hasOwnProperty(".google.api.routing")) {
-                        var error = $root.google.api.RoutingRule.verify(message[".google.api.routing"]);
+                        var error = $root.google.api.RoutingRule.verify(message[".google.api.routing"], long + 1);
                         if (error)
                             return ".google.api.routing." + error;
                     }
                     if (message[".google.longrunning.operationInfo"] != null && message.hasOwnProperty(".google.longrunning.operationInfo")) {
-                        var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"]);
+                        var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"], long + 1);
                         if (error)
                             return ".google.longrunning.operationInfo." + error;
                     }
@@ -52797,9 +54725,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.MethodOptions} MethodOptions
                  */
-                MethodOptions.fromObject = function fromObject(object) {
+                MethodOptions.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.MethodOptions)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.MethodOptions();
                     if (object.deprecated != null)
                         message.deprecated = Boolean(object.deprecated);
@@ -52826,7 +54758,7 @@
                     if (object.features != null) {
                         if (typeof object.features !== "object")
                             throw TypeError(".google.protobuf.MethodOptions.features: object expected");
-                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features);
+                        message.features = $root.google.protobuf.FeatureSet.fromObject(object.features, long + 1);
                     }
                     if (object.uninterpretedOption) {
                         if (!Array.isArray(object.uninterpretedOption))
@@ -52835,13 +54767,13 @@
                         for (var i = 0; i < object.uninterpretedOption.length; ++i) {
                             if (typeof object.uninterpretedOption[i] !== "object")
                                 throw TypeError(".google.protobuf.MethodOptions.uninterpretedOption: object expected");
-                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]);
+                            message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i], long + 1);
                         }
                     }
                     if (object[".google.api.http"] != null) {
                         if (typeof object[".google.api.http"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.api.http: object expected");
-                        message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"]);
+                        message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"], long + 1);
                     }
                     if (object[".google.api.methodSignature"]) {
                         if (!Array.isArray(object[".google.api.methodSignature"]))
@@ -52853,12 +54785,12 @@
                     if (object[".google.api.routing"] != null) {
                         if (typeof object[".google.api.routing"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.api.routing: object expected");
-                        message[".google.api.routing"] = $root.google.api.RoutingRule.fromObject(object[".google.api.routing"]);
+                        message[".google.api.routing"] = $root.google.api.RoutingRule.fromObject(object[".google.api.routing"], long + 1);
                     }
                     if (object[".google.longrunning.operationInfo"] != null) {
                         if (typeof object[".google.longrunning.operationInfo"] !== "object")
                             throw TypeError(".google.protobuf.MethodOptions..google.longrunning.operationInfo: object expected");
-                        message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"]);
+                        message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"], long + 1);
                     }
                     return message;
                 };
@@ -52985,7 +54917,7 @@
                     this.name = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -53111,9 +55043,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                UninterpretedOption.decode = function decode(reader, length, error) {
+                UninterpretedOption.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -53123,7 +55059,7 @@
                         case 2: {
                                 if (!(message.name && message.name.length))
                                     message.name = [];
-                                message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32()));
+                                message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 3: {
@@ -53151,7 +55087,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -53182,14 +55118,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                UninterpretedOption.verify = function verify(message) {
+                UninterpretedOption.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name")) {
                         if (!Array.isArray(message.name))
                             return "name: array expected";
                         for (var i = 0; i < message.name.length; ++i) {
-                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i]);
+                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i], long + 1);
                             if (error)
                                 return "name." + error;
                         }
@@ -53223,9 +55163,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.UninterpretedOption} UninterpretedOption
                  */
-                UninterpretedOption.fromObject = function fromObject(object) {
+                UninterpretedOption.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.UninterpretedOption)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.UninterpretedOption();
                     if (object.name) {
                         if (!Array.isArray(object.name))
@@ -53234,7 +55178,7 @@
                         for (var i = 0; i < object.name.length; ++i) {
                             if (typeof object.name[i] !== "object")
                                 throw TypeError(".google.protobuf.UninterpretedOption.name: object expected");
-                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i]);
+                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i], long + 1);
                         }
                     }
                     if (object.identifierValue != null)
@@ -53379,7 +55323,7 @@
                     function NamePart(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -53452,9 +55396,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    NamePart.decode = function decode(reader, length, error) {
+                    NamePart.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption.NamePart();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -53470,7 +55418,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -53505,9 +55453,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    NamePart.verify = function verify(message) {
+                    NamePart.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (!$util.isString(message.namePart))
                             return "namePart: string expected";
                         if (typeof message.isExtension !== "boolean")
@@ -53523,9 +55475,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart
                      */
-                    NamePart.fromObject = function fromObject(object) {
+                    NamePart.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.UninterpretedOption.NamePart)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.UninterpretedOption.NamePart();
                         if (object.namePart != null)
                             message.namePart = String(object.namePart);
@@ -53617,7 +55573,7 @@
                 function FeatureSet(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -53752,9 +55708,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FeatureSet.decode = function decode(reader, length, error) {
+                FeatureSet.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSet();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -53794,7 +55754,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -53825,9 +55785,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FeatureSet.verify = function verify(message) {
+                FeatureSet.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.fieldPresence != null && message.hasOwnProperty("fieldPresence"))
                         switch (message.fieldPresence) {
                         default:
@@ -53914,9 +55878,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FeatureSet} FeatureSet
                  */
-                FeatureSet.fromObject = function fromObject(object) {
+                FeatureSet.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FeatureSet)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FeatureSet();
                     switch (object.fieldPresence) {
                     default:
@@ -54294,7 +56262,7 @@
                     function VisibilityFeature(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -54349,9 +56317,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    VisibilityFeature.decode = function decode(reader, length, error) {
+                    VisibilityFeature.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSet.VisibilityFeature();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -54359,7 +56331,7 @@
                                 break;
                             switch (tag >>> 3) {
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -54390,9 +56362,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    VisibilityFeature.verify = function verify(message) {
+                    VisibilityFeature.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         return null;
                     };
     
@@ -54404,9 +56380,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FeatureSet.VisibilityFeature} VisibilityFeature
                      */
-                    VisibilityFeature.fromObject = function fromObject(object) {
+                    VisibilityFeature.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FeatureSet.VisibilityFeature)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         return new $root.google.protobuf.FeatureSet.VisibilityFeature();
                     };
     
@@ -54498,7 +56478,7 @@
                     this.defaults = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -54584,9 +56564,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FeatureSetDefaults.decode = function decode(reader, length, error) {
+                FeatureSetDefaults.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSetDefaults();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -54596,7 +56580,7 @@
                         case 1: {
                                 if (!(message.defaults && message.defaults.length))
                                     message.defaults = [];
-                                message.defaults.push($root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.decode(reader, reader.uint32()));
+                                message.defaults.push($root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 4: {
@@ -54608,7 +56592,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -54639,14 +56623,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FeatureSetDefaults.verify = function verify(message) {
+                FeatureSetDefaults.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.defaults != null && message.hasOwnProperty("defaults")) {
                         if (!Array.isArray(message.defaults))
                             return "defaults: array expected";
                         for (var i = 0; i < message.defaults.length; ++i) {
-                            var error = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify(message.defaults[i]);
+                            var error = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify(message.defaults[i], long + 1);
                             if (error)
                                 return "defaults." + error;
                         }
@@ -54698,9 +56686,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FeatureSetDefaults} FeatureSetDefaults
                  */
-                FeatureSetDefaults.fromObject = function fromObject(object) {
+                FeatureSetDefaults.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FeatureSetDefaults)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FeatureSetDefaults();
                     if (object.defaults) {
                         if (!Array.isArray(object.defaults))
@@ -54709,7 +56701,7 @@
                         for (var i = 0; i < object.defaults.length; ++i) {
                             if (typeof object.defaults[i] !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.defaults: object expected");
-                            message.defaults[i] = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fromObject(object.defaults[i]);
+                            message.defaults[i] = $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fromObject(object.defaults[i], long + 1);
                         }
                     }
                     switch (object.minimumEdition) {
@@ -54906,7 +56898,7 @@
                     function FeatureSetEditionDefault(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -54991,9 +56983,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    FeatureSetEditionDefault.decode = function decode(reader, length, error) {
+                    FeatureSetEditionDefault.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -55005,15 +57001,15 @@
                                     break;
                                 }
                             case 4: {
-                                    message.overridableFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                    message.overridableFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 5: {
-                                    message.fixedFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32());
+                                    message.fixedFeatures = $root.google.protobuf.FeatureSet.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -55044,9 +57040,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    FeatureSetEditionDefault.verify = function verify(message) {
+                    FeatureSetEditionDefault.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.edition != null && message.hasOwnProperty("edition"))
                             switch (message.edition) {
                             default:
@@ -55066,12 +57066,12 @@
                                 break;
                             }
                         if (message.overridableFeatures != null && message.hasOwnProperty("overridableFeatures")) {
-                            var error = $root.google.protobuf.FeatureSet.verify(message.overridableFeatures);
+                            var error = $root.google.protobuf.FeatureSet.verify(message.overridableFeatures, long + 1);
                             if (error)
                                 return "overridableFeatures." + error;
                         }
                         if (message.fixedFeatures != null && message.hasOwnProperty("fixedFeatures")) {
-                            var error = $root.google.protobuf.FeatureSet.verify(message.fixedFeatures);
+                            var error = $root.google.protobuf.FeatureSet.verify(message.fixedFeatures, long + 1);
                             if (error)
                                 return "fixedFeatures." + error;
                         }
@@ -55086,9 +57086,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault} FeatureSetEditionDefault
                      */
-                    FeatureSetEditionDefault.fromObject = function fromObject(object) {
+                    FeatureSetEditionDefault.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault();
                         switch (object.edition) {
                         default:
@@ -55149,12 +57153,12 @@
                         if (object.overridableFeatures != null) {
                             if (typeof object.overridableFeatures !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridableFeatures: object expected");
-                            message.overridableFeatures = $root.google.protobuf.FeatureSet.fromObject(object.overridableFeatures);
+                            message.overridableFeatures = $root.google.protobuf.FeatureSet.fromObject(object.overridableFeatures, long + 1);
                         }
                         if (object.fixedFeatures != null) {
                             if (typeof object.fixedFeatures !== "object")
                                 throw TypeError(".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixedFeatures: object expected");
-                            message.fixedFeatures = $root.google.protobuf.FeatureSet.fromObject(object.fixedFeatures);
+                            message.fixedFeatures = $root.google.protobuf.FeatureSet.fromObject(object.fixedFeatures, long + 1);
                         }
                         return message;
                     };
@@ -55239,7 +57243,7 @@
                     this.location = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -55305,9 +57309,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                SourceCodeInfo.decode = function decode(reader, length, error) {
+                SourceCodeInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -55317,11 +57325,11 @@
                         case 1: {
                                 if (!(message.location && message.location.length))
                                     message.location = [];
-                                message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32()));
+                                message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -55352,14 +57360,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                SourceCodeInfo.verify = function verify(message) {
+                SourceCodeInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.location != null && message.hasOwnProperty("location")) {
                         if (!Array.isArray(message.location))
                             return "location: array expected";
                         for (var i = 0; i < message.location.length; ++i) {
-                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i]);
+                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i], long + 1);
                             if (error)
                                 return "location." + error;
                         }
@@ -55375,9 +57387,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo
                  */
-                SourceCodeInfo.fromObject = function fromObject(object) {
+                SourceCodeInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.SourceCodeInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.SourceCodeInfo();
                     if (object.location) {
                         if (!Array.isArray(object.location))
@@ -55386,7 +57402,7 @@
                         for (var i = 0; i < object.location.length; ++i) {
                             if (typeof object.location[i] !== "object")
                                 throw TypeError(".google.protobuf.SourceCodeInfo.location: object expected");
-                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i]);
+                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i], long + 1);
                         }
                     }
                     return message;
@@ -55468,7 +57484,7 @@
                         this.leadingDetachedComments = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -55582,9 +57598,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Location.decode = function decode(reader, length, error) {
+                    Location.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo.Location();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -55628,7 +57648,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -55659,9 +57679,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Location.verify = function verify(message) {
+                    Location.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.path != null && message.hasOwnProperty("path")) {
                             if (!Array.isArray(message.path))
                                 return "path: array expected";
@@ -55700,9 +57724,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.SourceCodeInfo.Location} Location
                      */
-                    Location.fromObject = function fromObject(object) {
+                    Location.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.SourceCodeInfo.Location)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.SourceCodeInfo.Location();
                         if (object.path) {
                             if (!Array.isArray(object.path))
@@ -55829,7 +57857,7 @@
                     this.annotation = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -55895,9 +57923,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GeneratedCodeInfo.decode = function decode(reader, length, error) {
+                GeneratedCodeInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -55907,11 +57939,11 @@
                         case 1: {
                                 if (!(message.annotation && message.annotation.length))
                                     message.annotation = [];
-                                message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32()));
+                                message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -55942,14 +57974,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GeneratedCodeInfo.verify = function verify(message) {
+                GeneratedCodeInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.annotation != null && message.hasOwnProperty("annotation")) {
                         if (!Array.isArray(message.annotation))
                             return "annotation: array expected";
                         for (var i = 0; i < message.annotation.length; ++i) {
-                            var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i]);
+                            var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i], long + 1);
                             if (error)
                                 return "annotation." + error;
                         }
@@ -55965,9 +58001,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo
                  */
-                GeneratedCodeInfo.fromObject = function fromObject(object) {
+                GeneratedCodeInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.GeneratedCodeInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.GeneratedCodeInfo();
                     if (object.annotation) {
                         if (!Array.isArray(object.annotation))
@@ -55976,7 +58016,7 @@
                         for (var i = 0; i < object.annotation.length; ++i) {
                             if (typeof object.annotation[i] !== "object")
                                 throw TypeError(".google.protobuf.GeneratedCodeInfo.annotation: object expected");
-                            message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i]);
+                            message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i], long + 1);
                         }
                     }
                     return message;
@@ -56056,7 +58096,7 @@
                         this.path = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -56165,9 +58205,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Annotation.decode = function decode(reader, length, error) {
+                    Annotation.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo.Annotation();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -56202,7 +58246,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -56233,9 +58277,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Annotation.verify = function verify(message) {
+                    Annotation.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.path != null && message.hasOwnProperty("path")) {
                             if (!Array.isArray(message.path))
                                 return "path: array expected";
@@ -56272,9 +58320,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation
                      */
-                    Annotation.fromObject = function fromObject(object) {
+                    Annotation.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.protobuf.GeneratedCodeInfo.Annotation)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.protobuf.GeneratedCodeInfo.Annotation();
                         if (object.path) {
                             if (!Array.isArray(object.path))
@@ -56434,7 +58486,7 @@
                 function Duration(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -56509,9 +58561,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Duration.decode = function decode(reader, length, error) {
+                Duration.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Duration();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -56527,7 +58583,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -56558,9 +58614,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Duration.verify = function verify(message) {
+                Duration.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.seconds != null && message.hasOwnProperty("seconds"))
                         if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high)))
                             return "seconds: integer|Long expected";
@@ -56578,9 +58638,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Duration} Duration
                  */
-                Duration.fromObject = function fromObject(object) {
+                Duration.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Duration)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Duration();
                     if (object.seconds != null)
                         if ($util.Long)
@@ -56677,7 +58741,7 @@
                 function Any(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -56752,9 +58816,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Any.decode = function decode(reader, length, error) {
+                Any.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Any();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -56770,7 +58838,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -56801,9 +58869,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Any.verify = function verify(message) {
+                Any.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.type_url != null && message.hasOwnProperty("type_url"))
                         if (!$util.isString(message.type_url))
                             return "type_url: string expected";
@@ -56821,9 +58893,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Any} Any
                  */
-                Any.fromObject = function fromObject(object) {
+                Any.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Any)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Any();
                     if (object.type_url != null)
                         message.type_url = String(object.type_url);
@@ -56913,7 +58989,7 @@
                 function Empty(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -56968,9 +59044,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Empty.decode = function decode(reader, length, error) {
+                Empty.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Empty();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -56978,7 +59058,7 @@
                             break;
                         switch (tag >>> 3) {
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -57009,9 +59089,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Empty.verify = function verify(message) {
+                Empty.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     return null;
                 };
     
@@ -57023,9 +59107,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Empty} Empty
                  */
-                Empty.fromObject = function fromObject(object) {
+                Empty.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Empty)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     return new $root.google.protobuf.Empty();
                 };
     
@@ -57092,7 +59180,7 @@
                 function Timestamp(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -57167,9 +59255,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Timestamp.decode = function decode(reader, length, error) {
+                Timestamp.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Timestamp();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -57185,7 +59277,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -57216,9 +59308,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Timestamp.verify = function verify(message) {
+                Timestamp.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.seconds != null && message.hasOwnProperty("seconds"))
                         if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high)))
                             return "seconds: integer|Long expected";
@@ -57236,9 +59332,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.Timestamp} Timestamp
                  */
-                Timestamp.fromObject = function fromObject(object) {
+                Timestamp.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.Timestamp)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.Timestamp();
                     if (object.seconds != null)
                         if ($util.Long)
@@ -57335,7 +59435,7 @@
                     this.paths = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -57401,9 +59501,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                FieldMask.decode = function decode(reader, length, error) {
+                FieldMask.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldMask();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -57417,7 +59521,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -57448,9 +59552,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                FieldMask.verify = function verify(message) {
+                FieldMask.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.paths != null && message.hasOwnProperty("paths")) {
                         if (!Array.isArray(message.paths))
                             return "paths: array expected";
@@ -57469,9 +59577,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.protobuf.FieldMask} FieldMask
                  */
-                FieldMask.fromObject = function fromObject(object) {
+                FieldMask.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.protobuf.FieldMask)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.protobuf.FieldMask();
                     if (object.paths) {
                         if (!Array.isArray(object.paths))
@@ -57771,7 +59883,7 @@
                 function Operation(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -57890,9 +60002,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Operation.decode = function decode(reader, length, error) {
+                Operation.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.Operation();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -57904,7 +60020,7 @@
                                 break;
                             }
                         case 2: {
-                                message.metadata = $root.google.protobuf.Any.decode(reader, reader.uint32());
+                                message.metadata = $root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 3: {
@@ -57912,15 +60028,15 @@
                                 break;
                             }
                         case 4: {
-                                message.error = $root.google.rpc.Status.decode(reader, reader.uint32());
+                                message.error = $root.google.rpc.Status.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         case 5: {
-                                message.response = $root.google.protobuf.Any.decode(reader, reader.uint32());
+                                message.response = $root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -57951,15 +60067,19 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Operation.verify = function verify(message) {
+                Operation.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     var properties = {};
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.metadata != null && message.hasOwnProperty("metadata")) {
-                        var error = $root.google.protobuf.Any.verify(message.metadata);
+                        var error = $root.google.protobuf.Any.verify(message.metadata, long + 1);
                         if (error)
                             return "metadata." + error;
                     }
@@ -57969,7 +60089,7 @@
                     if (message.error != null && message.hasOwnProperty("error")) {
                         properties.result = 1;
                         {
-                            var error = $root.google.rpc.Status.verify(message.error);
+                            var error = $root.google.rpc.Status.verify(message.error, long + 1);
                             if (error)
                                 return "error." + error;
                         }
@@ -57979,7 +60099,7 @@
                             return "result: multiple values";
                         properties.result = 1;
                         {
-                            var error = $root.google.protobuf.Any.verify(message.response);
+                            var error = $root.google.protobuf.Any.verify(message.response, long + 1);
                             if (error)
                                 return "response." + error;
                         }
@@ -57995,28 +60115,32 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.Operation} Operation
                  */
-                Operation.fromObject = function fromObject(object) {
+                Operation.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.Operation)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.Operation();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.metadata != null) {
                         if (typeof object.metadata !== "object")
                             throw TypeError(".google.longrunning.Operation.metadata: object expected");
-                        message.metadata = $root.google.protobuf.Any.fromObject(object.metadata);
+                        message.metadata = $root.google.protobuf.Any.fromObject(object.metadata, long + 1);
                     }
                     if (object.done != null)
                         message.done = Boolean(object.done);
                     if (object.error != null) {
                         if (typeof object.error !== "object")
                             throw TypeError(".google.longrunning.Operation.error: object expected");
-                        message.error = $root.google.rpc.Status.fromObject(object.error);
+                        message.error = $root.google.rpc.Status.fromObject(object.error, long + 1);
                     }
                     if (object.response != null) {
                         if (typeof object.response !== "object")
                             throw TypeError(".google.longrunning.Operation.response: object expected");
-                        message.response = $root.google.protobuf.Any.fromObject(object.response);
+                        message.response = $root.google.protobuf.Any.fromObject(object.response, long + 1);
                     }
                     return message;
                 };
@@ -58107,7 +60231,7 @@
                 function GetOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -58172,9 +60296,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                GetOperationRequest.decode = function decode(reader, length, error) {
+                GetOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.GetOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -58186,7 +60314,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -58217,9 +60345,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                GetOperationRequest.verify = function verify(message) {
+                GetOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -58234,9 +60366,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.GetOperationRequest} GetOperationRequest
                  */
-                GetOperationRequest.fromObject = function fromObject(object) {
+                GetOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.GetOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.GetOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -58315,7 +60451,7 @@
                 function ListOperationsRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -58410,9 +60546,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListOperationsRequest.decode = function decode(reader, length, error) {
+                ListOperationsRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.ListOperationsRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -58436,7 +60576,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -58467,9 +60607,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListOperationsRequest.verify = function verify(message) {
+                ListOperationsRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -58493,9 +60637,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.ListOperationsRequest} ListOperationsRequest
                  */
-                ListOperationsRequest.fromObject = function fromObject(object) {
+                ListOperationsRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.ListOperationsRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.ListOperationsRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -58589,7 +60737,7 @@
                     this.operations = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -58665,9 +60813,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                ListOperationsResponse.decode = function decode(reader, length, error) {
+                ListOperationsResponse.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.ListOperationsResponse();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -58677,7 +60829,7 @@
                         case 1: {
                                 if (!(message.operations && message.operations.length))
                                     message.operations = [];
-                                message.operations.push($root.google.longrunning.Operation.decode(reader, reader.uint32()));
+                                message.operations.push($root.google.longrunning.Operation.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         case 2: {
@@ -58685,7 +60837,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -58716,14 +60868,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                ListOperationsResponse.verify = function verify(message) {
+                ListOperationsResponse.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.operations != null && message.hasOwnProperty("operations")) {
                         if (!Array.isArray(message.operations))
                             return "operations: array expected";
                         for (var i = 0; i < message.operations.length; ++i) {
-                            var error = $root.google.longrunning.Operation.verify(message.operations[i]);
+                            var error = $root.google.longrunning.Operation.verify(message.operations[i], long + 1);
                             if (error)
                                 return "operations." + error;
                         }
@@ -58742,9 +60898,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.ListOperationsResponse} ListOperationsResponse
                  */
-                ListOperationsResponse.fromObject = function fromObject(object) {
+                ListOperationsResponse.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.ListOperationsResponse)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.ListOperationsResponse();
                     if (object.operations) {
                         if (!Array.isArray(object.operations))
@@ -58753,7 +60913,7 @@
                         for (var i = 0; i < object.operations.length; ++i) {
                             if (typeof object.operations[i] !== "object")
                                 throw TypeError(".google.longrunning.ListOperationsResponse.operations: object expected");
-                            message.operations[i] = $root.google.longrunning.Operation.fromObject(object.operations[i]);
+                            message.operations[i] = $root.google.longrunning.Operation.fromObject(object.operations[i], long + 1);
                         }
                     }
                     if (object.nextPageToken != null)
@@ -58837,7 +60997,7 @@
                 function CancelOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -58902,9 +61062,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                CancelOperationRequest.decode = function decode(reader, length, error) {
+                CancelOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.CancelOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -58916,7 +61080,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -58947,9 +61111,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                CancelOperationRequest.verify = function verify(message) {
+                CancelOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -58964,9 +61132,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.CancelOperationRequest} CancelOperationRequest
                  */
-                CancelOperationRequest.fromObject = function fromObject(object) {
+                CancelOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.CancelOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.CancelOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -59042,7 +61214,7 @@
                 function DeleteOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -59107,9 +61279,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                DeleteOperationRequest.decode = function decode(reader, length, error) {
+                DeleteOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.DeleteOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -59121,7 +61297,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -59152,9 +61328,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                DeleteOperationRequest.verify = function verify(message) {
+                DeleteOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
@@ -59169,9 +61349,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.DeleteOperationRequest} DeleteOperationRequest
                  */
-                DeleteOperationRequest.fromObject = function fromObject(object) {
+                DeleteOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.DeleteOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.DeleteOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
@@ -59248,7 +61432,7 @@
                 function WaitOperationRequest(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -59323,9 +61507,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                WaitOperationRequest.decode = function decode(reader, length, error) {
+                WaitOperationRequest.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.WaitOperationRequest();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -59337,11 +61525,11 @@
                                 break;
                             }
                         case 2: {
-                                message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32());
+                                message.timeout = $root.google.protobuf.Duration.decode(reader, reader.uint32(), undefined, long + 1);
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -59372,14 +61560,18 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                WaitOperationRequest.verify = function verify(message) {
+                WaitOperationRequest.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.name != null && message.hasOwnProperty("name"))
                         if (!$util.isString(message.name))
                             return "name: string expected";
                     if (message.timeout != null && message.hasOwnProperty("timeout")) {
-                        var error = $root.google.protobuf.Duration.verify(message.timeout);
+                        var error = $root.google.protobuf.Duration.verify(message.timeout, long + 1);
                         if (error)
                             return "timeout." + error;
                     }
@@ -59394,16 +61586,20 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.WaitOperationRequest} WaitOperationRequest
                  */
-                WaitOperationRequest.fromObject = function fromObject(object) {
+                WaitOperationRequest.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.WaitOperationRequest)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.WaitOperationRequest();
                     if (object.name != null)
                         message.name = String(object.name);
                     if (object.timeout != null) {
                         if (typeof object.timeout !== "object")
                             throw TypeError(".google.longrunning.WaitOperationRequest.timeout: object expected");
-                        message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout);
+                        message.timeout = $root.google.protobuf.Duration.fromObject(object.timeout, long + 1);
                     }
                     return message;
                 };
@@ -59482,7 +61678,7 @@
                 function OperationInfo(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -59557,9 +61753,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                OperationInfo.decode = function decode(reader, length, error) {
+                OperationInfo.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.longrunning.OperationInfo();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -59575,7 +61775,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -59606,9 +61806,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                OperationInfo.verify = function verify(message) {
+                OperationInfo.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.responseType != null && message.hasOwnProperty("responseType"))
                         if (!$util.isString(message.responseType))
                             return "responseType: string expected";
@@ -59626,9 +61830,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.longrunning.OperationInfo} OperationInfo
                  */
-                OperationInfo.fromObject = function fromObject(object) {
+                OperationInfo.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.longrunning.OperationInfo)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.longrunning.OperationInfo();
                     if (object.responseType != null)
                         message.responseType = String(object.responseType);
@@ -59725,7 +61933,7 @@
                     this.details = [];
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -59811,9 +62019,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Status.decode = function decode(reader, length, error) {
+                Status.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.rpc.Status();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -59831,11 +62043,11 @@
                         case 3: {
                                 if (!(message.details && message.details.length))
                                     message.details = [];
-                                message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32()));
+                                message.details.push($root.google.protobuf.Any.decode(reader, reader.uint32(), undefined, long + 1));
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -59866,9 +62078,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Status.verify = function verify(message) {
+                Status.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.code != null && message.hasOwnProperty("code"))
                         if (!$util.isInteger(message.code))
                             return "code: integer expected";
@@ -59879,7 +62095,7 @@
                         if (!Array.isArray(message.details))
                             return "details: array expected";
                         for (var i = 0; i < message.details.length; ++i) {
-                            var error = $root.google.protobuf.Any.verify(message.details[i]);
+                            var error = $root.google.protobuf.Any.verify(message.details[i], long + 1);
                             if (error)
                                 return "details." + error;
                         }
@@ -59895,9 +62111,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.rpc.Status} Status
                  */
-                Status.fromObject = function fromObject(object) {
+                Status.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.rpc.Status)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.rpc.Status();
                     if (object.code != null)
                         message.code = object.code | 0;
@@ -59910,7 +62130,7 @@
                         for (var i = 0; i < object.details.length; ++i) {
                             if (typeof object.details[i] !== "object")
                                 throw TypeError(".google.rpc.Status.details: object expected");
-                            message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i]);
+                            message.details[i] = $root.google.protobuf.Any.fromObject(object.details[i], long + 1);
                         }
                     }
                     return message;
@@ -60153,7 +62373,7 @@
                     function SetIamPolicyRequest(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -60238,9 +62458,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    SetIamPolicyRequest.decode = function decode(reader, length, error) {
+                    SetIamPolicyRequest.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.SetIamPolicyRequest();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -60252,15 +62476,15 @@
                                     break;
                                 }
                             case 2: {
-                                    message.policy = $root.google.iam.v1.Policy.decode(reader, reader.uint32());
+                                    message.policy = $root.google.iam.v1.Policy.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             case 3: {
-                                    message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32());
+                                    message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -60291,19 +62515,23 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    SetIamPolicyRequest.verify = function verify(message) {
+                    SetIamPolicyRequest.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.resource != null && message.hasOwnProperty("resource"))
                             if (!$util.isString(message.resource))
                                 return "resource: string expected";
                         if (message.policy != null && message.hasOwnProperty("policy")) {
-                            var error = $root.google.iam.v1.Policy.verify(message.policy);
+                            var error = $root.google.iam.v1.Policy.verify(message.policy, long + 1);
                             if (error)
                                 return "policy." + error;
                         }
                         if (message.updateMask != null && message.hasOwnProperty("updateMask")) {
-                            var error = $root.google.protobuf.FieldMask.verify(message.updateMask);
+                            var error = $root.google.protobuf.FieldMask.verify(message.updateMask, long + 1);
                             if (error)
                                 return "updateMask." + error;
                         }
@@ -60318,21 +62546,25 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.SetIamPolicyRequest} SetIamPolicyRequest
                      */
-                    SetIamPolicyRequest.fromObject = function fromObject(object) {
+                    SetIamPolicyRequest.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.SetIamPolicyRequest)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.SetIamPolicyRequest();
                         if (object.resource != null)
                             message.resource = String(object.resource);
                         if (object.policy != null) {
                             if (typeof object.policy !== "object")
                                 throw TypeError(".google.iam.v1.SetIamPolicyRequest.policy: object expected");
-                            message.policy = $root.google.iam.v1.Policy.fromObject(object.policy);
+                            message.policy = $root.google.iam.v1.Policy.fromObject(object.policy, long + 1);
                         }
                         if (object.updateMask != null) {
                             if (typeof object.updateMask !== "object")
                                 throw TypeError(".google.iam.v1.SetIamPolicyRequest.updateMask: object expected");
-                            message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask);
+                            message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask, long + 1);
                         }
                         return message;
                     };
@@ -60414,7 +62646,7 @@
                     function GetIamPolicyRequest(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -60489,9 +62721,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    GetIamPolicyRequest.decode = function decode(reader, length, error) {
+                    GetIamPolicyRequest.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.GetIamPolicyRequest();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -60503,11 +62739,11 @@
                                     break;
                                 }
                             case 2: {
-                                    message.options = $root.google.iam.v1.GetPolicyOptions.decode(reader, reader.uint32());
+                                    message.options = $root.google.iam.v1.GetPolicyOptions.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -60538,14 +62774,18 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    GetIamPolicyRequest.verify = function verify(message) {
+                    GetIamPolicyRequest.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.resource != null && message.hasOwnProperty("resource"))
                             if (!$util.isString(message.resource))
                                 return "resource: string expected";
                         if (message.options != null && message.hasOwnProperty("options")) {
-                            var error = $root.google.iam.v1.GetPolicyOptions.verify(message.options);
+                            var error = $root.google.iam.v1.GetPolicyOptions.verify(message.options, long + 1);
                             if (error)
                                 return "options." + error;
                         }
@@ -60560,16 +62800,20 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.GetIamPolicyRequest} GetIamPolicyRequest
                      */
-                    GetIamPolicyRequest.fromObject = function fromObject(object) {
+                    GetIamPolicyRequest.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.GetIamPolicyRequest)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.GetIamPolicyRequest();
                         if (object.resource != null)
                             message.resource = String(object.resource);
                         if (object.options != null) {
                             if (typeof object.options !== "object")
                                 throw TypeError(".google.iam.v1.GetIamPolicyRequest.options: object expected");
-                            message.options = $root.google.iam.v1.GetPolicyOptions.fromObject(object.options);
+                            message.options = $root.google.iam.v1.GetPolicyOptions.fromObject(object.options, long + 1);
                         }
                         return message;
                     };
@@ -60649,7 +62893,7 @@
                         this.permissions = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -60725,9 +62969,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    TestIamPermissionsRequest.decode = function decode(reader, length, error) {
+                    TestIamPermissionsRequest.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.TestIamPermissionsRequest();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -60745,7 +62993,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -60776,9 +63024,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    TestIamPermissionsRequest.verify = function verify(message) {
+                    TestIamPermissionsRequest.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.resource != null && message.hasOwnProperty("resource"))
                             if (!$util.isString(message.resource))
                                 return "resource: string expected";
@@ -60800,9 +63052,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.TestIamPermissionsRequest} TestIamPermissionsRequest
                      */
-                    TestIamPermissionsRequest.fromObject = function fromObject(object) {
+                    TestIamPermissionsRequest.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.TestIamPermissionsRequest)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.TestIamPermissionsRequest();
                         if (object.resource != null)
                             message.resource = String(object.resource);
@@ -60893,7 +63149,7 @@
                         this.permissions = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -60959,9 +63215,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    TestIamPermissionsResponse.decode = function decode(reader, length, error) {
+                    TestIamPermissionsResponse.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.TestIamPermissionsResponse();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -60975,7 +63235,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -61006,9 +63266,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    TestIamPermissionsResponse.verify = function verify(message) {
+                    TestIamPermissionsResponse.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.permissions != null && message.hasOwnProperty("permissions")) {
                             if (!Array.isArray(message.permissions))
                                 return "permissions: array expected";
@@ -61027,9 +63291,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.TestIamPermissionsResponse} TestIamPermissionsResponse
                      */
-                    TestIamPermissionsResponse.fromObject = function fromObject(object) {
+                    TestIamPermissionsResponse.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.TestIamPermissionsResponse)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.TestIamPermissionsResponse();
                         if (object.permissions) {
                             if (!Array.isArray(object.permissions))
@@ -61113,7 +63381,7 @@
                     function GetPolicyOptions(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -61178,9 +63446,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    GetPolicyOptions.decode = function decode(reader, length, error) {
+                    GetPolicyOptions.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.GetPolicyOptions();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -61192,7 +63464,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -61223,9 +63495,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    GetPolicyOptions.verify = function verify(message) {
+                    GetPolicyOptions.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.requestedPolicyVersion != null && message.hasOwnProperty("requestedPolicyVersion"))
                             if (!$util.isInteger(message.requestedPolicyVersion))
                                 return "requestedPolicyVersion: integer expected";
@@ -61240,9 +63516,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.GetPolicyOptions} GetPolicyOptions
                      */
-                    GetPolicyOptions.fromObject = function fromObject(object) {
+                    GetPolicyOptions.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.GetPolicyOptions)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.GetPolicyOptions();
                         if (object.requestedPolicyVersion != null)
                             message.requestedPolicyVersion = object.requestedPolicyVersion | 0;
@@ -61323,7 +63603,7 @@
                         this.auditConfigs = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -61420,9 +63700,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Policy.decode = function decode(reader, length, error) {
+                    Policy.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.Policy();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -61436,13 +63720,13 @@
                             case 4: {
                                     if (!(message.bindings && message.bindings.length))
                                         message.bindings = [];
-                                    message.bindings.push($root.google.iam.v1.Binding.decode(reader, reader.uint32()));
+                                    message.bindings.push($root.google.iam.v1.Binding.decode(reader, reader.uint32(), undefined, long + 1));
                                     break;
                                 }
                             case 6: {
                                     if (!(message.auditConfigs && message.auditConfigs.length))
                                         message.auditConfigs = [];
-                                    message.auditConfigs.push($root.google.iam.v1.AuditConfig.decode(reader, reader.uint32()));
+                                    message.auditConfigs.push($root.google.iam.v1.AuditConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                     break;
                                 }
                             case 3: {
@@ -61450,7 +63734,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -61481,9 +63765,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Policy.verify = function verify(message) {
+                    Policy.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.version != null && message.hasOwnProperty("version"))
                             if (!$util.isInteger(message.version))
                                 return "version: integer expected";
@@ -61491,7 +63779,7 @@
                             if (!Array.isArray(message.bindings))
                                 return "bindings: array expected";
                             for (var i = 0; i < message.bindings.length; ++i) {
-                                var error = $root.google.iam.v1.Binding.verify(message.bindings[i]);
+                                var error = $root.google.iam.v1.Binding.verify(message.bindings[i], long + 1);
                                 if (error)
                                     return "bindings." + error;
                             }
@@ -61500,7 +63788,7 @@
                             if (!Array.isArray(message.auditConfigs))
                                 return "auditConfigs: array expected";
                             for (var i = 0; i < message.auditConfigs.length; ++i) {
-                                var error = $root.google.iam.v1.AuditConfig.verify(message.auditConfigs[i]);
+                                var error = $root.google.iam.v1.AuditConfig.verify(message.auditConfigs[i], long + 1);
                                 if (error)
                                     return "auditConfigs." + error;
                             }
@@ -61519,9 +63807,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.Policy} Policy
                      */
-                    Policy.fromObject = function fromObject(object) {
+                    Policy.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.Policy)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.Policy();
                         if (object.version != null)
                             message.version = object.version | 0;
@@ -61532,7 +63824,7 @@
                             for (var i = 0; i < object.bindings.length; ++i) {
                                 if (typeof object.bindings[i] !== "object")
                                     throw TypeError(".google.iam.v1.Policy.bindings: object expected");
-                                message.bindings[i] = $root.google.iam.v1.Binding.fromObject(object.bindings[i]);
+                                message.bindings[i] = $root.google.iam.v1.Binding.fromObject(object.bindings[i], long + 1);
                             }
                         }
                         if (object.auditConfigs) {
@@ -61542,7 +63834,7 @@
                             for (var i = 0; i < object.auditConfigs.length; ++i) {
                                 if (typeof object.auditConfigs[i] !== "object")
                                     throw TypeError(".google.iam.v1.Policy.auditConfigs: object expected");
-                                message.auditConfigs[i] = $root.google.iam.v1.AuditConfig.fromObject(object.auditConfigs[i]);
+                                message.auditConfigs[i] = $root.google.iam.v1.AuditConfig.fromObject(object.auditConfigs[i], long + 1);
                             }
                         }
                         if (object.etag != null)
@@ -61649,7 +63941,7 @@
                         this.members = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -61735,9 +64027,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    Binding.decode = function decode(reader, length, error) {
+                    Binding.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.Binding();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -61755,11 +64051,11 @@
                                     break;
                                 }
                             case 3: {
-                                    message.condition = $root.google.type.Expr.decode(reader, reader.uint32());
+                                    message.condition = $root.google.type.Expr.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -61790,9 +64086,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    Binding.verify = function verify(message) {
+                    Binding.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.role != null && message.hasOwnProperty("role"))
                             if (!$util.isString(message.role))
                                 return "role: string expected";
@@ -61804,7 +64104,7 @@
                                     return "members: string[] expected";
                         }
                         if (message.condition != null && message.hasOwnProperty("condition")) {
-                            var error = $root.google.type.Expr.verify(message.condition);
+                            var error = $root.google.type.Expr.verify(message.condition, long + 1);
                             if (error)
                                 return "condition." + error;
                         }
@@ -61819,9 +64119,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.Binding} Binding
                      */
-                    Binding.fromObject = function fromObject(object) {
+                    Binding.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.Binding)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.Binding();
                         if (object.role != null)
                             message.role = String(object.role);
@@ -61835,7 +64139,7 @@
                         if (object.condition != null) {
                             if (typeof object.condition !== "object")
                                 throw TypeError(".google.iam.v1.Binding.condition: object expected");
-                            message.condition = $root.google.type.Expr.fromObject(object.condition);
+                            message.condition = $root.google.type.Expr.fromObject(object.condition, long + 1);
                         }
                         return message;
                     };
@@ -61922,7 +64226,7 @@
                         this.auditLogConfigs = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -61998,9 +64302,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    AuditConfig.decode = function decode(reader, length, error) {
+                    AuditConfig.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.AuditConfig();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -62014,11 +64322,11 @@
                             case 3: {
                                     if (!(message.auditLogConfigs && message.auditLogConfigs.length))
                                         message.auditLogConfigs = [];
-                                    message.auditLogConfigs.push($root.google.iam.v1.AuditLogConfig.decode(reader, reader.uint32()));
+                                    message.auditLogConfigs.push($root.google.iam.v1.AuditLogConfig.decode(reader, reader.uint32(), undefined, long + 1));
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -62049,9 +64357,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    AuditConfig.verify = function verify(message) {
+                    AuditConfig.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.service != null && message.hasOwnProperty("service"))
                             if (!$util.isString(message.service))
                                 return "service: string expected";
@@ -62059,7 +64371,7 @@
                             if (!Array.isArray(message.auditLogConfigs))
                                 return "auditLogConfigs: array expected";
                             for (var i = 0; i < message.auditLogConfigs.length; ++i) {
-                                var error = $root.google.iam.v1.AuditLogConfig.verify(message.auditLogConfigs[i]);
+                                var error = $root.google.iam.v1.AuditLogConfig.verify(message.auditLogConfigs[i], long + 1);
                                 if (error)
                                     return "auditLogConfigs." + error;
                             }
@@ -62075,9 +64387,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.AuditConfig} AuditConfig
                      */
-                    AuditConfig.fromObject = function fromObject(object) {
+                    AuditConfig.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.AuditConfig)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.AuditConfig();
                         if (object.service != null)
                             message.service = String(object.service);
@@ -62088,7 +64404,7 @@
                             for (var i = 0; i < object.auditLogConfigs.length; ++i) {
                                 if (typeof object.auditLogConfigs[i] !== "object")
                                     throw TypeError(".google.iam.v1.AuditConfig.auditLogConfigs: object expected");
-                                message.auditLogConfigs[i] = $root.google.iam.v1.AuditLogConfig.fromObject(object.auditLogConfigs[i]);
+                                message.auditLogConfigs[i] = $root.google.iam.v1.AuditLogConfig.fromObject(object.auditLogConfigs[i], long + 1);
                             }
                         }
                         return message;
@@ -62172,7 +64488,7 @@
                         this.exemptedMembers = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -62248,9 +64564,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    AuditLogConfig.decode = function decode(reader, length, error) {
+                    AuditLogConfig.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.AuditLogConfig();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -62268,7 +64588,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -62299,9 +64619,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    AuditLogConfig.verify = function verify(message) {
+                    AuditLogConfig.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.logType != null && message.hasOwnProperty("logType"))
                             switch (message.logType) {
                             default:
@@ -62330,9 +64654,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.AuditLogConfig} AuditLogConfig
                      */
-                    AuditLogConfig.fromObject = function fromObject(object) {
+                    AuditLogConfig.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.AuditLogConfig)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.AuditLogConfig();
                         switch (object.logType) {
                         default:
@@ -62465,7 +64793,7 @@
                         this.auditConfigDeltas = [];
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -62542,9 +64870,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    PolicyDelta.decode = function decode(reader, length, error) {
+                    PolicyDelta.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.PolicyDelta();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -62554,17 +64886,17 @@
                             case 1: {
                                     if (!(message.bindingDeltas && message.bindingDeltas.length))
                                         message.bindingDeltas = [];
-                                    message.bindingDeltas.push($root.google.iam.v1.BindingDelta.decode(reader, reader.uint32()));
+                                    message.bindingDeltas.push($root.google.iam.v1.BindingDelta.decode(reader, reader.uint32(), undefined, long + 1));
                                     break;
                                 }
                             case 2: {
                                     if (!(message.auditConfigDeltas && message.auditConfigDeltas.length))
                                         message.auditConfigDeltas = [];
-                                    message.auditConfigDeltas.push($root.google.iam.v1.AuditConfigDelta.decode(reader, reader.uint32()));
+                                    message.auditConfigDeltas.push($root.google.iam.v1.AuditConfigDelta.decode(reader, reader.uint32(), undefined, long + 1));
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -62595,14 +64927,18 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    PolicyDelta.verify = function verify(message) {
+                    PolicyDelta.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.bindingDeltas != null && message.hasOwnProperty("bindingDeltas")) {
                             if (!Array.isArray(message.bindingDeltas))
                                 return "bindingDeltas: array expected";
                             for (var i = 0; i < message.bindingDeltas.length; ++i) {
-                                var error = $root.google.iam.v1.BindingDelta.verify(message.bindingDeltas[i]);
+                                var error = $root.google.iam.v1.BindingDelta.verify(message.bindingDeltas[i], long + 1);
                                 if (error)
                                     return "bindingDeltas." + error;
                             }
@@ -62611,7 +64947,7 @@
                             if (!Array.isArray(message.auditConfigDeltas))
                                 return "auditConfigDeltas: array expected";
                             for (var i = 0; i < message.auditConfigDeltas.length; ++i) {
-                                var error = $root.google.iam.v1.AuditConfigDelta.verify(message.auditConfigDeltas[i]);
+                                var error = $root.google.iam.v1.AuditConfigDelta.verify(message.auditConfigDeltas[i], long + 1);
                                 if (error)
                                     return "auditConfigDeltas." + error;
                             }
@@ -62627,9 +64963,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.PolicyDelta} PolicyDelta
                      */
-                    PolicyDelta.fromObject = function fromObject(object) {
+                    PolicyDelta.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.PolicyDelta)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.PolicyDelta();
                         if (object.bindingDeltas) {
                             if (!Array.isArray(object.bindingDeltas))
@@ -62638,7 +64978,7 @@
                             for (var i = 0; i < object.bindingDeltas.length; ++i) {
                                 if (typeof object.bindingDeltas[i] !== "object")
                                     throw TypeError(".google.iam.v1.PolicyDelta.bindingDeltas: object expected");
-                                message.bindingDeltas[i] = $root.google.iam.v1.BindingDelta.fromObject(object.bindingDeltas[i]);
+                                message.bindingDeltas[i] = $root.google.iam.v1.BindingDelta.fromObject(object.bindingDeltas[i], long + 1);
                             }
                         }
                         if (object.auditConfigDeltas) {
@@ -62648,7 +64988,7 @@
                             for (var i = 0; i < object.auditConfigDeltas.length; ++i) {
                                 if (typeof object.auditConfigDeltas[i] !== "object")
                                     throw TypeError(".google.iam.v1.PolicyDelta.auditConfigDeltas: object expected");
-                                message.auditConfigDeltas[i] = $root.google.iam.v1.AuditConfigDelta.fromObject(object.auditConfigDeltas[i]);
+                                message.auditConfigDeltas[i] = $root.google.iam.v1.AuditConfigDelta.fromObject(object.auditConfigDeltas[i], long + 1);
                             }
                         }
                         return message;
@@ -62736,7 +65076,7 @@
                     function BindingDelta(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -62831,9 +65171,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    BindingDelta.decode = function decode(reader, length, error) {
+                    BindingDelta.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.BindingDelta();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -62853,11 +65197,11 @@
                                     break;
                                 }
                             case 4: {
-                                    message.condition = $root.google.type.Expr.decode(reader, reader.uint32());
+                                    message.condition = $root.google.type.Expr.decode(reader, reader.uint32(), undefined, long + 1);
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -62888,9 +65232,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    BindingDelta.verify = function verify(message) {
+                    BindingDelta.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.action != null && message.hasOwnProperty("action"))
                             switch (message.action) {
                             default:
@@ -62907,7 +65255,7 @@
                             if (!$util.isString(message.member))
                                 return "member: string expected";
                         if (message.condition != null && message.hasOwnProperty("condition")) {
-                            var error = $root.google.type.Expr.verify(message.condition);
+                            var error = $root.google.type.Expr.verify(message.condition, long + 1);
                             if (error)
                                 return "condition." + error;
                         }
@@ -62922,9 +65270,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.BindingDelta} BindingDelta
                      */
-                    BindingDelta.fromObject = function fromObject(object) {
+                    BindingDelta.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.BindingDelta)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.BindingDelta();
                         switch (object.action) {
                         default:
@@ -62953,7 +65305,7 @@
                         if (object.condition != null) {
                             if (typeof object.condition !== "object")
                                 throw TypeError(".google.iam.v1.BindingDelta.condition: object expected");
-                            message.condition = $root.google.type.Expr.fromObject(object.condition);
+                            message.condition = $root.google.type.Expr.fromObject(object.condition, long + 1);
                         }
                         return message;
                     };
@@ -63056,7 +65408,7 @@
                     function AuditConfigDelta(properties) {
                         if (properties)
                             for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                                if (properties[keys[i]] != null)
+                                if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                     this[keys[i]] = properties[keys[i]];
                     }
     
@@ -63151,9 +65503,13 @@
                      * @throws {Error} If the payload is not a reader or valid buffer
                      * @throws {$protobuf.util.ProtocolError} If required fields are missing
                      */
-                    AuditConfigDelta.decode = function decode(reader, length, error) {
+                    AuditConfigDelta.decode = function decode(reader, length, error, long) {
                         if (!(reader instanceof $Reader))
                             reader = $Reader.create(reader);
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $Reader.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.iam.v1.AuditConfigDelta();
                         while (reader.pos < end) {
                             var tag = reader.uint32();
@@ -63177,7 +65533,7 @@
                                     break;
                                 }
                             default:
-                                reader.skipType(tag & 7);
+                                reader.skipType(tag & 7, long);
                                 break;
                             }
                         }
@@ -63208,9 +65564,13 @@
                      * @param {Object.<string,*>} message Plain object to verify
                      * @returns {string|null} `null` if valid, otherwise the reason why it is not
                      */
-                    AuditConfigDelta.verify = function verify(message) {
+                    AuditConfigDelta.verify = function verify(message, long) {
                         if (typeof message !== "object" || message === null)
                             return "object expected";
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            return "maximum nesting depth exceeded";
                         if (message.action != null && message.hasOwnProperty("action"))
                             switch (message.action) {
                             default:
@@ -63240,9 +65600,13 @@
                      * @param {Object.<string,*>} object Plain object
                      * @returns {google.iam.v1.AuditConfigDelta} AuditConfigDelta
                      */
-                    AuditConfigDelta.fromObject = function fromObject(object) {
+                    AuditConfigDelta.fromObject = function fromObject(object, long) {
                         if (object instanceof $root.google.iam.v1.AuditConfigDelta)
                             return object;
+                        if (long === undefined)
+                            long = 0;
+                        if (long > $util.recursionLimit)
+                            throw Error("maximum nesting depth exceeded");
                         var message = new $root.google.iam.v1.AuditConfigDelta();
                         switch (object.action) {
                         default:
@@ -63386,7 +65750,7 @@
                 function Expr(properties) {
                     if (properties)
                         for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
+                            if (properties[keys[i]] != null && keys[i] !== "__proto__")
                                 this[keys[i]] = properties[keys[i]];
                 }
     
@@ -63481,9 +65845,13 @@
                  * @throws {Error} If the payload is not a reader or valid buffer
                  * @throws {$protobuf.util.ProtocolError} If required fields are missing
                  */
-                Expr.decode = function decode(reader, length, error) {
+                Expr.decode = function decode(reader, length, error, long) {
                     if (!(reader instanceof $Reader))
                         reader = $Reader.create(reader);
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $Reader.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.type.Expr();
                     while (reader.pos < end) {
                         var tag = reader.uint32();
@@ -63507,7 +65875,7 @@
                                 break;
                             }
                         default:
-                            reader.skipType(tag & 7);
+                            reader.skipType(tag & 7, long);
                             break;
                         }
                     }
@@ -63538,9 +65906,13 @@
                  * @param {Object.<string,*>} message Plain object to verify
                  * @returns {string|null} `null` if valid, otherwise the reason why it is not
                  */
-                Expr.verify = function verify(message) {
+                Expr.verify = function verify(message, long) {
                     if (typeof message !== "object" || message === null)
                         return "object expected";
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        return "maximum nesting depth exceeded";
                     if (message.expression != null && message.hasOwnProperty("expression"))
                         if (!$util.isString(message.expression))
                             return "expression: string expected";
@@ -63564,9 +65936,13 @@
                  * @param {Object.<string,*>} object Plain object
                  * @returns {google.type.Expr} Expr
                  */
-                Expr.fromObject = function fromObject(object) {
+                Expr.fromObject = function fromObject(object, long) {
                     if (object instanceof $root.google.type.Expr)
                         return object;
+                    if (long === undefined)
+                        long = 0;
+                    if (long > $util.recursionLimit)
+                        throw Error("maximum nesting depth exceeded");
                     var message = new $root.google.type.Expr();
                     if (object.expression != null)
                         message.expression = String(object.expression);
